Как освободить память что-то вроде этого (Visual Studio 2008 - Win32/консоли):C++ как освободить память * char?
я могу включать в себя только: iostream
#include <iostream>
void data_t(char *test[])
{
test[0] = new char[];
test[1] = new char[];
test[0] = "Test1";
test[1] = "Test2";
}
int main()
{
char *test[2];
data_t(test);
cout<<test[0]<<"\n";
cout<<test[1]<<"\n";
delete[] test[0];//Debug assertion failed! - The program '[7884] Zadanie_4_sortowanie.exe: Native' has exited with code 3 (0x3).
delete[] test[1];
}
Что я сделал не так?
Что означает 'новый символ []', предназначенный для обозначения? Это не законный C++. – jalf
Печально, что MSVS принимает такие вещи. Интересно, что он с этим делает? –
Оператор-ассистент на указателях символов не копирует данные, он просто меняет его, просто назначает указатель. Итак, предположим, что вы исправили 'new []' s, чтобы быть, скажем, 'new [6]', чтобы эти две строки работали, вы сразу же просачиваете эту память, перенаправляя оба указателя, чтобы указать на строковые литералы. Ошибка возникает, потому что вы можете только «удалить []» то, что вы выделили с помощью «new []», и эти указатели в настоящее время указывают на литералы. Короткая версия, используйте 'std: string', если вы можете и понимаете c-манипуляцию строки, если вы должны использовать буферы символов с нулевым завершением. – dmckee