Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / В чем ошибка (перегрузка NEW) / 7 сообщений из 7, страница 1 из 1
24.07.2006, 19:48
    #33875026
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка (перегрузка NEW)
автор#define DEBUG_NEW new(__LINE__)
#define new DEBUG_NEW


inline void * __cdecl operator new(size_t size, int line)
{
void *ptr = (void *)malloc(size);

data.address = (unsigned long)ptr;
data.line = line;
data.size = size;
mySpy.AddToList(data);

return (ptr);
};//new(unsigned int size)

хотя такой вариант работает:
автор#define

inline void * __cdecl operator new(size_t size)
{
void *ptr = (void *)malloc(size);

data.address = (unsigned long)ptr;
data.size = size;
mySpy.AddToList(data);

return (ptr);
};//new(unsigned int size)
...
Рейтинг: 0 / 0
24.07.2006, 20:02
    #33875046
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка (перегрузка NEW)
во втором фрагменте #define написал по-ошибке
...
Рейтинг: 0 / 0
24.07.2006, 20:21
    #33875059
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка (перегрузка NEW)
Вопрос собственно в том, что если я перегружаю:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
inline void * __cdecl operator new(size_t size, int line)
{
	void *ptr = (void *)malloc(size);

	data.address = (unsigned long)ptr;
	//strcpy(data.file, file);
	data.line = line;
	data.size = size;
	mySpy.AddToList(data);
	
	return (ptr);
};//new(unsigned int size)

каков должен быть теперь синтаксис new, чтобы вызвана была перегруженна функция???
...
Рейтинг: 0 / 0
24.07.2006, 21:14
    #33875112
В чем ошибка (перегрузка NEW)
TubrikВопрос собственно в том, что если я перегружаю:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
inline void * __cdecl operator new(size_t size, int line)
{
	void *ptr = (void *)malloc(size);

	data.address = (unsigned long)ptr;
	//strcpy(data.file, file);
	data.line = line;
	data.size = size;
	mySpy.AddToList(data);
	
	return (ptr);
};//new(unsigned int size)

каков должен быть теперь синтаксис new, чтобы вызвана была перегруженна функция???
Ну, например, так (если я не ошибся):
Код: plaintext
1.
2.
char *Stroka=(char *)new(sizeof(char), 10 ) //Будет вызвана new(size_t size, int line)
char *AnotherStroka=(char *)new(sizeof(char)) //Будет вызвана new(size_t size)
...
Рейтинг: 0 / 0
25.07.2006, 19:44
    #33877981
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка (перегрузка NEW)
Странный кодю Ибо основоположник делал это так
void* operator new(size_t);
void* operator new[](size_t);
...
Рейтинг: 0 / 0
25.07.2006, 19:45
    #33877983
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка (перегрузка NEW)
Ничего не странный, нужно знать в какой строке и файле произошло выделение памяти для отлова утечки
...
Рейтинг: 0 / 0
26.07.2006, 16:20
    #33880174
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка (перегрузка NEW)
Хмм
а вся беда в define
берем код
#define DEBUG_NEW new(__LINE__)
#define new DEBUG_NEW

void* operator new(size_t size, int line)
{
void *ptr = (void *)malloc(size);

data.address = (unsigned long)ptr;
data.line = line;
data.size = size;
mySpy.AddToList(data);

return (ptr);
};//new(unsigned int size)

int main()
{
char* c_ptr;
c_ptr = new(char);
delete c_ptr;
c_ptr = new char;
delete c_ptr;
}
после препроцессора
void* operator new(4)(size_t size, int line)
{
void *ptr = (void *)malloc(size);

data.address = (unsigned long)ptr;
data.line = line;
data.size = size;
mySpy.AddToList(data);

return (ptr);
};

int main()
{
char* c_ptr;
c_ptr = new(19)(char);
delete c_ptr;
c_ptr = new(21) char;
delete c_ptr;
}
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / В чем ошибка (перегрузка NEW) / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]