私は多くのクラスがあるコードに取り組んでいます。コンストラクターでオブジェクトのさまざまな配列にメモリを割り当てています。しかし、すべてが大丈夫だと思っていたときに、奇妙なエラーが発生しました。例として、Points という名前のクラスがあり、データと呼ばれるポイントの double 配列があるとします。
さて、私は今すべてのコードを投稿しています:
class Points
{
double *data;
Points::Points()
{
data = new double [C_NUMBER_OF_POINTS];
}
Points::~Points()
{
delete [] this->data;
}
};
デバッグした後、エラーが this ポインターにあることがわかりましたが、その理由はわかりませんか? デストラクタは、オブジェクトが破棄されている間にデータを削除するために呼び出されますが、オブジェクトはまだメモリ内にあります。私の質問は、なぜこのようになっているのですか?
私が得ていたエラーは、基本的にメモリの取り扱いミスによるものです
HandTracker.exe の 0x778f15de で未処理の例外: 0x00000000: 操作は正常に完了しました。引用符
次のデストラクタを使用すると、このポインタの意味を削除するとエラーが修正されます
Points::~Points()
{
delete []data;
}
私の質問は、メモリリークを処理する方法についてではなく、このポインターに関連するこの特定の問題についてです。このエラーを発生させるこのポインターの背後にあるメカニズムは何ですか?