2

如果我尝试删除一个字符,我会收到访问冲突错误。

这是我的代码:

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

    delete [] myString;
    return 0;
}

我也试过

delete myString

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

4

4 回答 4

8

线后

 myString = "Hello";

指针myString不再指向您分配的数组,而是指向字符串文字。线

delete [] myString;

然后尝试删除文字(这会导致崩溃)。

您可以使用 复制字符串strcpy,或者更好的是使用std::string

std::string myString = "Hello";
cout << myString;
于 2012-10-29T09:46:59.640 回答
4
char *myString = new char[32];
myString = "Hello";

这会将变量重新分配myString给其他东西(特别是常量“Hello”字符串)。不要那样做。如果你真的需要一个 char 指针,使用

strcpy(myString, "Hello");

甚至更好

char *myString = strdup("Hello");

然后使用释放分配的内存

free(myString);

代替

delete [] myString;

这将是一个错误。

不要那样做。改为使用std::string

于 2012-10-29T09:47:31.843 回答
0

您试图删除分配“Hello”的内存。您需要使用 strcpy 来复制内容而不是指针。

于 2012-10-29T09:47:21.577 回答
0

由于以下行,您会遇到访问冲突,您的指针不再查看您分配的动态内存,而是指向文字“hello”,而不是您无法删除的......

myString = "Hello";

那条线也不会做你想做的事,你需要使用(注意你不需要在这个变化中新建/删除)

char myString[32];
strcpy(myString,"Hello")

或者更好strncpy......在谷歌或书中查找它。

如果您尝试使用 c++,甚至更好

std::string myString;
myString = "Hello"; 
于 2012-10-29T09:55:31.903 回答