ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #521  
Старый 19.12.2007, 09:22
iv.
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.

Я может быть конечно где-то лажанул, но что-то не понимаю в какую сторону вообще копать. Хелп!
 

  #522  
Старый 19.12.2007, 09:40
Forcer
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме:
3578578

Репутация: 275
Отправить сообщение для Forcer с помощью ICQ
По умолчанию

iv.
Так сложно сказать - всё вроде верно. Приведи полный сорц - посмотрим. А так много чего может быть, на мой любительский взгляд конечно
 

  #523  
Старый 19.12.2007, 09:42
iv.
Moderator - Level 7
Регистрация: 21.03.2007
Сообщений: 1,200
Провел на форуме:
7134052

Репутация: 1204


По умолчанию

Проблему решил, подзабыл адресную арифметику. =)
А ошибка в общем-то и говорила, что вышел за пределы выделенной памяти.
 

  #524  
Старый 20.12.2007, 03:16
iv.
Moderator - Level 7
Регистрация: 21.03.2007
Сообщений: 1,200
Провел на форуме:
7134052

Репутация: 1204


По умолчанию

Это снова я.
Как вызвать перегруженый оператор delete?
Перегружал так: void operator delete(void *p, char *fileName, int lineNumber)
 

  #525  
Старый 20.12.2007, 11:16
groundhog
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме:
2238549

Репутация: 1318


Отправить сообщение для groundhog с помощью ICQ
По умолчанию

Ну и вызывай по своим параметрам... А вообще, я так понял, твой delete не имеет никакого смыслового отношения к настоящему delete, поэтому лучше назови его по другому...
 

  #526  
Старый 20.12.2007, 11:18
KEZ
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
 

  #527  
Старый 20.12.2007, 11:28
groundhog
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме:
2238549

Репутация: 1318


Отправить сообщение для groundhog с помощью ICQ
По умолчанию

kez, я может не верно выразился... Я имел в виду, что при той реализации, что он хочет лучше реализовать это как обычную функцию... Параметры того оператора, что он хочет реализовать повергают в шок...
 

  #528  
Старый 20.12.2007, 11:48
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Ну да... А я уж подумал ты решил создать свой оператор...
 

  #529  
Старый 20.12.2007, 20:22
iv.
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 и при экспорте компилятор ругается. =\

В общем-то, набор параметров на самом деле особого значения не имеет.
 

  #530  
Старый 20.12.2007, 20:29
KEZ
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)
 


Быстрый переход




ANTICHAT.XYZ