私はかなり大きなコードを書いている初期段階にあります。私はそのように1つのクラスを定義しました:
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() {}