 |
|

19.12.2007, 09:22
|
|
Познавший АНТИЧАТ
Регистрация: 21.03.2007
Сообщений: 1,200
С нами:
10074686
Репутация:
1204
|
|
Ребят, у меня тут несколько тупая проблема.
Предположим некий код:
Код:
...
p = new double [n];
T = new double [n];
...
delete [] p;
delete [] T;
На участке после выделения памяти она вся используется.
При трассировке на команде delete [] T; вылетает следующий эксепшн:
HEAP[prog.exe]: Heap block at 00365EE8 modified at 00365F34 past requested size of 44
Windows has triggered a breakpoint in prog.exe.
Я может быть конечно где-то лажанул, но что-то не понимаю в какую сторону вообще копать. Хелп!
|
|
|

19.12.2007, 09:40
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
С нами:
10042776
Репутация:
275
|
|
iv.
Так сложно сказать - всё вроде верно. Приведи полный сорц - посмотрим. А так много чего может быть, на мой любительский взгляд конечно 
|
|
|

19.12.2007, 09:42
|
|
Познавший АНТИЧАТ
Регистрация: 21.03.2007
Сообщений: 1,200
С нами:
10074686
Репутация:
1204
|
|
Проблему решил, подзабыл адресную арифметику. =)
А ошибка в общем-то и говорила, что вышел за пределы выделенной памяти.
|
|
|

20.12.2007, 03:16
|
|
Познавший АНТИЧАТ
Регистрация: 21.03.2007
Сообщений: 1,200
С нами:
10074686
Репутация:
1204
|
|
Это снова я.
Как вызвать перегруженый оператор delete?
Перегружал так: void operator delete(void *p, char *fileName, int lineNumber)
|
|
|

20.12.2007, 11:16
|
|
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
С нами:
9999746
Репутация:
1318
|
|
Ну и вызывай по своим параметрам... А вообще, я так понял, твой delete не имеет никакого смыслового отношения к настоящему delete, поэтому лучше назови его по другому...
|
|
|

20.12.2007, 11:18
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
С нами:
11042306
Репутация:
2726
|
|
Перегружал так: void operator delete(void *p, char *fileName, int lineNumber)
o_O
Ну и вызывай по своим параметрам... А вообще, я так понял, твой delete не имеет никакого смыслового отношения к настоящему delete, поэтому лучше назови его по другому...
Назвать оператор по другому? o_O o_O
|
|
|

20.12.2007, 11:28
|
|
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
С нами:
9999746
Репутация:
1318
|
|
kez, я может не верно выразился... Я имел в виду, что при той реализации, что он хочет лучше реализовать это как обычную функцию... Параметры того оператора, что он хочет реализовать повергают в шок...
|
|
|

20.12.2007, 11:48
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
С нами:
11042306
Репутация:
2726
|
|
Ну да... А я уж подумал ты решил создать свой оператор...
|
|
|

20.12.2007, 20:22
|
|
Познавший АНТИЧАТ
Регистрация: 21.03.2007
Сообщений: 1,200
С нами:
10074686
Репутация:
1204
|
|
Господа, мне нужен именно перегруженный delete, ибо работаю с памятью по-своему.
А операторы new и delete имеют обыкновение вызывать конструкторы и деструкторы объектов. Даже при перегрузке.
Просто new я перегрузил похожим образом и вызывается он примерно так:
Код:
DWORD* mem = new(__FILE__, __LINE__) DWORD
Следующая хитрость позволяет его вызывать вообще как стандартный:
Код:
#define new new(__FILE__, __LINE__)
Так вот с delete так не прокатывает почему-то.
ПС: перегружать с тем же набором параметров мешает то, что эти операторы у меня сидят в dll и при экспорте компилятор ругается. =\
В общем-то, набор параметров на самом деле особого значения не имеет.
|
|
|

20.12.2007, 20:29
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
С нами:
11042306
Репутация:
2726
|
|
Код:
void* __cdecl operator new( size_t s )
{
OutputDebugString("Trace: new");
return lmalloc( s );
}
void __cdecl operator delete( void *p )
{
OutputDebugString("Trace: delete");
lfree( p );
}
|
|
|
|
 |
|
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 6 (пользователей: 0 , гостей: 6)
|
|
|
|