分配字符串时,char*new和delete []错误

Jak*_*ake 7 c++ memory runtime-error new-operator delete-operator

我需要一个C++复习.为什么这会给出内存异常?

pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
Run Code Online (Sandbox Code Playgroud)

cod*_*ict 9

pear = new char[1024];
Run Code Online (Sandbox Code Playgroud)

从堆分配1024个字符的内存并pear指向它的开头.

pear = "happy go lucky";
Run Code Online (Sandbox Code Playgroud)

pear 现在指向驻留在只读段中的字符串文字,并且先前分配的内存被泄露.

delete [] pear;
Run Code Online (Sandbox Code Playgroud)

您尝试释放只读字符串,这是一种未定义的行为,表现为运行时异常.


Nic*_*las 5

pear ="快乐幸运";

将替换分配的指针new char[].所以现在你delete[] pear试图释放静态分配的字符串.

那很糟.您只能使用delete自己分配的内容new.既然你覆盖了(并丢失了)那个指针,你就不能delete这样.