删除* char []

时间:2012-10-29 09:44:51

标签: c++

如果我尝试删除char,则会收到访问冲突错误。

继承我的代码:

int main()
{
    char *myString = new char[32];
    myString = "Hello";
    cout << myString;
    cin.get();

    delete [] myString;
    return 0;
}

我也试过

delete myString

但我仍然会遇到访问冲突错误

4 个答案:

答案 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";