我需要一个 C++ 复习。为什么这会产生内存异常?
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
我需要一个 C++ 复习。为什么这会产生内存异常?
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
pear = new char[1024];
1024 个字符的内存从堆中分配并pear
指向它的开头。
pear = "happy go lucky";
pear
现在指向位于只读段中的字符串文字,并且先前分配的内存被泄漏。
delete [] pear;
您尝试释放只读字符串,这是一种未定义的行为,表现为运行时异常。
pear = "祝你好运";
这将替换由 分配的指针new char[]
。所以现在你delete[] pear
尝试释放静态分配的字符串。
那很糟。你只能用delete
你分配的东西new
。而且由于您覆盖(并丢失)了该指针,因此您不能delete
这样做。
您正在做的是分配pear
给堆上分配的字符数组,然后重新分配它以指向位于静态位置的字符串。如果您尝试删除它将出错,因为您不应该删除该静态位置中的内容。