Здравствуйте, zerk, Вы писали:
Z>Если конкретно этот пример, то правильно, а если :
Z> int len=10;
Z> char *c, d[3]="12\0";
Z> c= new char(len); // если сделать ZeroMemory, то будет ОК
Z> strcpy(c,&d[0]);
Z>....
Z>манипуляции с буфером
Z>....
Z> delete [] c; // даст ошибку ~ DAMAGE after (before)
Z> // normal block
Z>В общем, выделяя память для массива char, ее надо очистить (желательно), и выделять с запасом (+1), тогда не важно где и когда выделил память, delete [] отработает нормально.
Блин, не мудрено!!!
new char( initial_value_of_the_char )
new char[ size_of_char_array ]
Понятно, в чем разница?
А ошибку дает по очень простой причине: в конце блока есть некоторая "зона стабилизации", в дебаге заполненная, кажется, 0xE5. Если она изменилась — это признак "стрельбы по памяти".