|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.12.2007, 16:35 | #1 |
Регистрация: 04.12.2007
Сообщений: 4
|
загрузка и выгрузка памяти на языке СИ
Помогите, как в языке Си выделить память и удалить её (malloc, free)?
Как удалить элемент массива? Если записыватся массив, а необходимо выбрать определенный элемент и удалить его(ссылка на этот элемент должна быть удалена).Соответствено, после удаления должно произойти смещение элементов. |
14.12.2007, 17:09 | #2 |
Форумчанин
Регистрация: 10.12.2007
Сообщений: 158
|
По возможности rtfm. И гугл в помощь )) Почитай ещё о Standart Template Library - там удобно реализованы удобные классы динамических массивов и других структур данных.
Если будешь делать сам, то для изменения длинны выделенного участка памяти (без потери информации) есть функция realloc. Сначала сдвигаешь конец массива (через цикл), а потом меняешь размер. А вообще, если ты пишешь на с++, лучше используй new и delete. Они написаны через malloc и free, но имеют некоторые бонусы. Напр. возвращают типизированный указатель, а не void*. |
17.12.2007, 15:45 | #3 | |
Регистрация: 04.12.2007
Сообщений: 4
|
Цитата:
Ошибка в функции удаления. Удаляется nItem - 1 элемент, ссылка на этот удаленный элемент так и остается в массиве, а требуется удалить элемент nItem. Вы затираете ссылку на элемент nItem при переписи массива. Это значит что память, выделенная под него не освобождается. Надо исправить. Код:
Последний раз редактировалось merax; 20.12.2007 в 07:27. |
|
17.12.2007, 19:08 | #4 |
Форумчанин
Регистрация: 10.12.2007
Сообщений: 158
|
Какого типа массив aChasy? Небось структура какая-то )) Тогда в aChasy[nItem] (!!! заметь, ты удаляешь не тот элемент) перед(!) сдвигом надо освободить память у атрибутов структуры, для которых ты её уделял. Во время сдвига пропадёт сам элемент, а потом ты просто изменяешь размер массива. (пропадает последний).
Это должно выглядеть примерно так: Код:
|
18.12.2007, 14:32 | #5 |
Регистрация: 04.12.2007
Сообщений: 4
|
Структура это, могу для примера весь код дать
//Work1.c Код:
Последний раз редактировалось merax; 20.12.2007 в 07:28. |
19.12.2007, 18:25 | #6 |
Форумчанин
Регистрация: 10.12.2007
Сообщений: 158
|
Ну так у тебя получается даже память не динамически выделяется )) тогда совсем всё просто. Сдвигаешь элементы и меняешь количество.
Попробуй так: Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выгрузка картинок в проект | Rusl92 | Общие вопросы Delphi | 2 | 20.08.2008 23:00 |
Программа на русском языке в Windows XP на другом языке... Как? | 29bit | Свободное общение | 4 | 01.02.2008 17:24 |
Выгрузка в файл с динамическим названием. | Квэнди | БД в Delphi | 0 | 24.06.2007 15:39 |
выгрузка в файл | zetrix | БД в Delphi | 0 | 30.10.2006 12:50 |