Re[2]: Как правильно удалить динамически созданный массив?
От: Кодт Россия  
Дата: 03.12.02 09:07
Оценка:
Здравствуйте, 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. Если она изменилась — это признак "стрельбы по памяти".
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.