Здравствуйте, 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);
либо встроенный, либо переопределенный.
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн