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使用的代码可能会有所帮助,特别是对于析构函数。这可能是堆栈损坏,但由于它在析构函数上崩溃,他认为它与析构函数有关。他没有看到这一点-很好的理解。