ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

19.12.2007, 09:22
|
|
Moderator - Level 7
Регистрация: 21.03.2007
Сообщений: 1,200
Провел на форуме: 7134052
Репутация:
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
Провел на форуме: 3578578
Репутация:
275
|
|
iv.
Так сложно сказать - всё вроде верно. Приведи полный сорц - посмотрим. А так много чего может быть, на мой любительский взгляд конечно 
|
|
|

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

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

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

20.12.2007, 11:18
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
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
Провел на форуме: 2238549
Репутация:
1318
|
|
kez, я может не верно выразился... Я имел в виду, что при той реализации, что он хочет лучше реализовать это как обычную функцию... Параметры того оператора, что он хочет реализовать повергают в шок...
|
|
|

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

20.12.2007, 20:22
|
|
Moderator - Level 7
Регистрация: 21.03.2007
Сообщений: 1,200
Провел на форуме: 7134052
Репутация:
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
Провел на форуме: 1941233
Репутация:
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 );
}
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|