删除引用时双重释放或损坏

double free or corruption when deleting reference

我有一个带有一些基本构造函数的 class。 main

中的代码
 C1 g = *new C1(2);
 delete &g;

导致错误:

double free or corruption

这段代码不等同于

C1 *g = new C1(2);
delete g;

那是什么东西,我不明白。?

假设这是 C++,您的第一个片段相当于

C1 *p = new C1(2);
C1 g = *p;
delete &g;

p 是一个指针,位于堆栈上。
p 指向的位置位于堆上。
g 是一个 C1 并且位于堆栈上。
&g(传递给 delete 的值)因此 returns 来自堆栈段中某处的内存地址。

现在,如果我没记错的话:
堆栈上的变量是自动分配和释放的,所以虽然你的 delete &g 本身并不是导致错误的原因,但触发它的是函数末尾的自动释放。
此外,gp 指向的值的 copy,而不是对它的 reference 之类的.
另外 p 根本不会被释放。

现在,在你的第二个片段中:

C1 *g = new C1(2);
delete g;

g 是一个指针,位于堆栈上。
g 指向的位置在堆上。 g(传递给delete的值)因此returns堆段某处的内存地址,大家都很高兴。