![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Освобождение памяти [D7, WinXP]
KygECHuK © (2006-04-14 20:21:00)При освобождении памяти, занятой при помощи функций GetMem или StrAlloc иногда у меня возникает ошибка доступа памяти. В чём может скрываться ошибка ?
KygECHuK (2006-04-18 10:12:00) [21]А вот на тебе Acces Violation в самый интересный момент - сиди думай. Уже месяц жизни потратил на выяснении причины. Короче дело обстоит так:
я использую буффер памяти, очень часто меняя его длинну. При очередной смене длинны появляется вышеупомянатая ошибка.
И почему ошибка появляется стабильно при выделении больши объёмов памяти до 3 Mb ?
Прочитал о MemoryManager - ответа нет.
Anatoly Podgoretsky (2006-04-18 10:02:00) [22]Тогда должно работать.
KygECHuK (2006-04-18 09:51:00) [23]>> Desdechado © (14.04.06 20:37) [1]
>> да в чем угодно:
>>1. неверный адрес
Адресс верный, записан, проверен.
>>2. неверный размер
Размер верен, записан, проверен для Getmem, а в StrAlloc он хранитсся в пямяти до массива
>>3. выделяем одним, освобождаем несовместимой функцией
Для GetMem - FreeMem, а для StrAlloc - StrDispose
>>4. память там уже освобождена
Непосредственнно перед освобождением происходит работа с массивом
>> FreeMem(ptV[,40]);//Вот тут возникнет ошибка.<< еще бы :)
Исследовав проблему я пришел к выводу, что при выделении больших объёмов памяти ошибки происходят чаще.
Gero (2006-04-15 01:47:00) [24]> да в чем угодно
Поддерживаю.
Rial (2006-04-14 20:45:00) [25]Очень вероятна ситуация:
Выделяешь память под массив или другую структуру.
При работе обращаешься по арресу, большему допустимого, из-за чего при освобождении гарантированно возникнет ошибка.
Type TV=Array[0..0]of Byte;
pTV=^TV;
...
Var pV:pTV;
begin
GetMem(pV,40);
pV^[100]:=11;//Это, скрорее всего, прокатит.
...
FreeMem(ptV[,40]);//Вот тут возникнет ошибка.
end;
Desdechado (2006-04-14 20:37:00) [26]да в чем угодно:
1. неверный адрес
2. неверный размер
3. выделяем одним, освобождаем несовместимой функцией
4. память там уже освобождена
5. т.п.