ANTICHAT Forum
HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
НОВЫЕ ТОРГОВАЯ НОВОСТИ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #521  
Старый 19.12.2007, 09:22
iv.
Познавший АНТИЧАТ
Регистрация: 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.

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

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

Репутация: 275
По умолчанию

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

  #523  
Старый 19.12.2007, 09:42
iv.
Познавший АНТИЧАТ
Регистрация: 21.03.2007
Сообщений: 1,200
С нами: 10074686

Репутация: 1204


По умолчанию

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

  #524  
Старый 20.12.2007, 03:16
iv.
Познавший АНТИЧАТ
Регистрация: 21.03.2007
Сообщений: 1,200
С нами: 10074686

Репутация: 1204


По умолчанию

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

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

Репутация: 1318


По умолчанию

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

  #526  
Старый 20.12.2007, 11:18
KEZ
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
 
Ответить с цитированием

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

Репутация: 1318


По умолчанию

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

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

Репутация: 2726


По умолчанию

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

  #529  
Старый 20.12.2007, 20:22
iv.
Познавший АНТИЧАТ
Регистрация: 21.03.2007
Сообщений: 1,200
С нами: 10074686

Репутация: 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
С нами: 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 );
}
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 6 (пользователей: 0 , гостей: 6)
 


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




ANTICHAT ™ © 2001- Antichat Kft.