Что-то с памятью!
От: svpout  
Дата: 29.10.02 23:01
Оценка:
Помогите пожалуйста разобраться!
Я выделяю память
r = new double[m_ulCommonAmount + 1];
s = new double[m_ulCommonAmount + 1];
потом её удаляю после использования
if (r != NULL) delete [] r;
if (s != NULL) delete [] s;
r = s = NULL;
если откомпилить в Debug то во время освобождения возникает ошибка: Damage: after Normal block (#246) at 0x002fb168.
Эта ошибка никак не связана с повторным удалением тогоже блока. Блок очищается только один раз. Проверял.
Пробовал заменить выделение на:
r = (double*)HeapAlloc(GetProcessHeap(),0,(m_ulCommonAmount + 1)*sizeof(double));
s = (double*)HeapAlloc(GetProcessHeap(),0,(m_ulCommonAmount + 1)*sizeof(double));
Ошибка пропала, но в режиме отладки (F5) возникает уже в асме!
Я не очень пнимаю что происходит.
Помогите пожалуйста.
Сергей
Re: Что-то с памятью!
От: Pushkin Россия www.linkbit.com
Дата: 30.10.02 06:13
Оценка:
Здравствуйте svpout, Вы писали:

S>Помогите пожалуйста разобраться!


    double* r = new double[100 + 1]; 
    double* s = new double[100 + 1]; 
    if (r != NULL) delete [] r; 
    if (s != NULL) delete [] s; 
    r = s = NULL;

этот фрагмент точно работает
во-первых и так видно
а во-вторых я даже проверил зачем-то
так что не майся с HeapAlloc а добавляй сюда построчно и смотри когда возникнет проблема.
Кстати что значит "повторное удаление того же блока"? здесь вроде разные блоки удаляются
Re: Что-то с памятью!
От: Stanislav V. Zudin Россия  
Дата: 30.10.02 06:55
Оценка:
Здравствуйте svpout, Вы писали:

S>Помогите пожалуйста разобраться!

S>Я выделяю память
S>если откомпилить в Debug то во время освобождения возникает ошибка: Damage: after Normal block (#246) at 0x002fb168.

Тебе же почти по-русски написали , что память попортил за пределами массива. Не забывай, что последние элементы в твоих массивах имеют индекс m_ulCommonAmount.
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: Что-то с памятью!
От: Аноним  
Дата: 30.10.02 15:11
Оценка:
Здравствуйте Pushkin, Вы писали:

P>Здравствуйте svpout, Вы писали:


S>>Помогите пожалуйста разобраться!


P>
P>    double* r = new double[100 + 1]; 
P>    double* s = new double[100 + 1]; 
P>    if (r != NULL) delete [] r; 
P>    if (s != NULL) delete [] s; 
P>    r = s = NULL; 
P>

P>этот фрагмент точно работает
P>во-первых и так видно
P>а во-вторых я даже проверил зачем-то
P>так что не майся с HeapAlloc а добавляй сюда построчно и смотри когда возникнет проблема.
P>Кстати что значит "повторное удаление того же блока"? здесь вроде разные блоки удаляются
---------------------------
Спасибо за совет.
Уже построчно смотрел.
Смысл в том, что Debug удаляет, используя HeapFree,
а в Release версии просто выполняется код free(p). Там прямо условие такое стоит.
"Повторное удаление того же блока" Означает, что эти массивы удаляются в программе только один раз.
Меня в принципе Release устраивает, но уж очень неприятно отлаживать, когда ошибка все время появляется.
Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.