Moa*_*nti 0 c++ valgrind memory-leaks delete-operator
在实现下面的C++代码后,我运行valgrind --leak-check=full以检查是否有任何内存泄漏.结果是在退出时使用了0个字节,并且 没有泄漏是可能的.
然而,后来我发现我忘了使用delete[] x而不是仅仅delete x在析构函数中使用.
我搜索了一些解释(例如:C++中的delete vs delete []运算符),我读到的所有内容都说使用deletewithout []会导致内存泄漏,因为它只调用数组中第一个对象的析构函数.
我将代码更改为删除[],并且valgrind输出相同(如预期的那样).但是现在我很困惑:"valgrind是否有问题,或者delete即使没有运算符,阵列也能正常工作[]吗?"
#include <iostream>
#include <string.h>
using namespace std;
class Foo {
private: char *x;
public:
Foo(const char* px) {
this->x = new char[strlen(px)+1];
strcpy(this->x, px);
}
~Foo() {
delete x;
}
void printInfo() { cout << "x: " << x << endl; }
};
int main() {
Foo *objfoo = new Foo("ABC123");
objfoo->printInfo();
delete objfoo;
return 0;
}
Run Code Online (Sandbox Code Playgroud)