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