Re[9]: new + delete = Access Violation? Как быть?
От: folk Россия  
Дата: 20.05.03 23:22
Оценка:
Здравствуйте, FlashBack, Вы писали:

FB>Вот кривой код:

FB>
FB>void MyFunc(void)
FB>{
FB>char *buf;

FB>buf=new char[10];
FB>printf(buff,"Test");
FB>delete buf;

FB>buf=new char[15];
FB>printf(buff,"Test");
FB>delete buf;  /// Вот здесь выходит Access Violation ???

FB>}
FB>


FB>Вот рабочий код:


FB>
FB>void MyFunc(void)
FB>{
FB>char *buf;

FB>buf=new char[10];
FB>printf(buff,"Test");
FB>delete [10] buf;

FB>buf=new char[15];
FB>printf(buff,"Test");
FB>delete [10]buf;  /// Вот здесь  Access Violation нету!
FB>}
FB>


Оба варианта кривые.
В строках
printf(buff,"Test");

видимо не printf, a sprintf и не buff, a buf?

А вот
delete [10]buf;

насколько я понимаю — синтаксическая ошибка, которую VC почему-то не ловит. Надо писать delete[] buf;

Я попробовал — VC6 может принимать в квадратных скобках какой угодно тип, например этот код компилируется и правильно работает:
struct A {} a;
char* p = new char[10];
delete[a] p;


Короче VC6 игнорирует этот "аргумент" и вызывает
void operator delete[](void* p);

либо встроенный, либо переопределенный.
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.