私が現在取り組んでいるプログラムでは、 を含むオブジェクトがありますstd::vectors
。これらのオブジェクトを削除しようとすると問題が発生し、オブジェクトからメモリが解放されません。
これをテストするために最小限のプログラムを作成しましたが、このプログラムでも正しく動作させることはできません。
これが私がテストに使用したプログラムです。
#include<iostream>
#include<vector>
struct node{
std::vector<int> list;
bool isParent;
struct node* child;
~node(){
delete[] child;
}
node(){
isParent = false;
list.push_back(5); // comenting this line would make it work correctly
}
void divide_r(){
if (isParent){
for(int i = 0; i < 8; i++){
(child+i)->divide_r();
}
}else{
node *c;
c = new node[8];
child = &c[0];
isParent = true;
}
}
};
int main(){
node *root = new node;
for(int i = 0; i < 8; i++){
root->divide_r();
}
delete root;
sleep(10);
return 0;
}
そのため、ベクトルに何かをプッシュすると、メモリを解放できません。
それが重要な場合、ubuntuでg ++を使用しています。私は何か間違ったことをしていますか、それともこれでうまくいくのでしょうか?
また、デストラクタの「リスト」からメモリを解放するためにさまざまな方法を使用しようとしましたが、「リスト」は範囲外になるため、とにかく解放する必要があると思います。
プログラムは約 1.4GB の RAM を使用しますが、スリープ後に何も解放されず、プログラムが終了します。