如果我尝试删除char,则会收到访问冲突错误。
继承我的代码:
int main()
{
char *myString = new char[32];
myString = "Hello";
cout << myString;
cin.get();
delete [] myString;
return 0;
}
我也试过
delete myString
但我仍然会遇到访问冲突错误
答案 0 :(得分:8)
行后
myString = "Hello";
指针myString
不再指向您已分配的数组,而是指向字符串文字。这条线
delete [] myString;
然后尝试删除文字(导致崩溃)。
您可以使用strcpy
复制字符串,或者更好,使用std::string
。
std::string myString = "Hello";
cout << myString;
答案 1 :(得分:4)
char *myString = new char[32];
myString = "Hello";
这会将myString
变量重新分配给其他内容(具体而言,为常量“Hello”字符串)。不要那样做。如果您确实需要char指针,请使用
strcpy(myString, "Hello");
甚至更好
char *myString = strdup("Hello");
然后使用
释放分配的内存free(myString);
而不是
delete [] myString;
这将是一个错误。
但不要这样做。请改用std::string
。
答案 2 :(得分:0)
您尝试删除分配了“Hello”的内存。 您需要使用strcpy来复制内容而不是指针。
答案 3 :(得分:0)
由于以下行而导致访问冲突,您的指针不再查看您分配的动态内存,而是指向文字“hello”,而您无法删除....
myString = "Hello";
那条线也不会做你想要的,你需要使用(注意你不需要在这个改变中新/删除)
char myString[32];
strcpy(myString,"Hello")
或更好strncpy
...在Google或书中查找。
如果你正在尝试使用c ++,那就更好了
std::string myString;
myString = "Hello";