我正处于编写相当大的代码的开始阶段。我已经定义了一个类:
class GPUMD {
private:
double xhi, xlo, yhi, ylo, zhi, zlo;
int numAtoms;
Atom *atoms;
public:
GPUMD();
~GPUMD();
};
析构函数定义如下:
GPUMD::~GPUMD() {
if(atoms != NULL)
delete [] atoms;
}
现在,代码执行此操作:
int main(int argc, char *argv[]) {
GPUMD gpumd;
exit(0);
}
我得到一个 glibc 检测到的错误:试图释放无效指针。使用 valgrind,我看到这个错误可以追溯到我的 GPUMD 析构函数。出于某种原因,即使我没有为该指针分配任何内容,atoms != NULL 测试也会返回 true。这是为什么?
编辑:构造函数定义为:
GPUMD::GPUMD() {}