ТАК, Темыч я тут чего-то не понял. Объясни, пожалуйста.
Чем отличается
delete от
delete [] Я так понимаю: существуют функции malloc и free.
malloc принимает в качестве параметра размер блока и возвращает адрес первого байта этого блока.
free принимает в качестве параметра адрес первого байта блока, и удаляет ВЕСЬ(:!:) блок. Информация о размере блока храниться в системной памяти.
Проверяем:
- Код: Выделить всё
void main()
{
cout<<"Run...\n";
long*ptr1;long*ptr2;
cout<<"Test1...";
ptr1=new long[5];
ptr1[1]=10;
delete ptr1;//Создаем и удаляем блок из шести DWORD
cout<<"OK\n";
cout<<"Test2...";
ptr2=new long[5];//Создаем блок из шести DWORD
ptr2++;// Смещаем указатель на 1 DWORD
delete ptr2;//Удаляем блок из шести DWORD//O-ops...
cout<<"OK\n";
cout<<"Test3...";
ptr1++;//Убедимся, что все элементы ptr1 были удалены
*ptr1=15;
cout<<(*ptr1);//Действительно, вы получите либо access violation, либо не 15
cout<<"OK\n";
}
Оператор
new вызывает
malloc, используя
sizeof(type) и вызывают конструтор класса, если он есть.
Оператор
delete вызывает деструктор класса, если он есть, и вызывает
free.
Так как у простых типов нет конструкторов класса, new и malloc, delete и free, полность аналогичны.
Таким образом: если выделять количество байт, указанное в
a.size(), и копировать, используя strncpy, то все работает.
А вот код, приведенный мною и не должен работать.
Правильно?
Однако, примеры такого кода я где-то встречал... И там нету strncpy