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