C++ 这是内存泄漏吗?

C++ 这是内存泄漏吗?,c++,memory,C++,Memory,这是我的密码 class MyClass { ... }; int main(){ MyClass class = new MyClass; /*if i do this, delete class; i receive a seg fault*/ return 0; } 这是内存泄漏吗?如果是,我如何修复它 提前感谢,因为您使用了类关键字作为变量,所以它甚至不会编译,所以您不会得到segfault 如果您修复了这个问题(可能还有其他几个我认为存在但不想查找的问题),我不会期望它发生故障

这是我的密码

class MyClass
{
...
};

int main(){

MyClass class = new MyClass;
/*if i do this,
delete class;
i receive a seg fault*/

return 0;
}
这是内存泄漏吗?如果是,我如何修复它

提前感谢,因为您使用了
关键字作为变量,所以它甚至不会编译,所以您不会得到segfault

如果您修复了这个问题(可能还有其他几个我认为存在但不想查找的问题),我不会期望它发生故障,除非您的构造函数或析构函数中存在严重问题


首先编译您的代码,然后我们可以整理出任何逻辑错误。

< P>除了不能将类用作变量名之外,C++中的新运算符还会返回指向MyClass类型的对象的指针。桩号应为:

MyClass *objectPtr = new MyClass;

如果您随后未能删除它,它将仍然存在于内存中,直到程序完成,因此将被视为泄漏(推测)。

假设您正确获得了变量名,并将其设置为
MyClass*
,是的,这是内存泄漏。因为您通过调用
new
获得了内存,但还没有将内存还给您

解决方法是在使用完指针后删除它

例如:

MyClass *c = new MyClass;
...
delete c;
请注意,如果您已
new
ed一个数组,则需要按如下方式释放它:

MyClass *c_arr = new MyClass[10];
...
delete[] c_arr;

回答这个问题,是的。使用new分配而不删除是内存泄漏。然而,具有讽刺意味的是,内存泄漏是这个代码段中最轻微的问题,而且它甚至不重要,因为程序在“泄漏”的那一刻就终止了

我假设这是“psuedo代码”,所以我不会指出编译错误。但是避免使用psuedo代码是有帮助的,因为它不允许人们看到您在代码片段中没有包含的问题


如果
delete
导致segfault,我认为这是您真正的问题,那么除了内存泄漏之外,您的问题还可能是一系列其他问题。内存泄漏通常不会立即导致SEG故障,它们必须首先耗尽可用内存池。如果这是您的问题,那么包含MyClass使用的代码可能会有所帮助,特别是对于析构函数。

这可能是堆栈损坏,但由于它在析构函数上崩溃,他认为它与析构函数有关。他没有看到这一点-很好的理解。