[英]How to delete pointers of vector
我想正確刪除向量的所有元素。 我需要以您應該在下面看到的方式填充結構向量的向量,每次創建一個調用new
方法的結構向量。
這是我的代碼:
struct node
{
int index;
double value;
}
struct problem
{
int l;
struct node **x;
};
struct problem prob; // set by read_problem
std::vector<node *> vettProbX;
int main(){
node tmpValue;
std::vector <node> *temp;
for (int i=0; i<10; i++)
{
temp = new std::vector<node>;
for (int i=0; i<10; i++)
{
tmpValue.index=i;
tmpValue.value=i;
temp->push_back(tmpValue);
}
vettProbX.push_back(temp->data());
}
prob.x=&vettProbX[0];
//Destructor
for(int CC=0; CC<vettProbX.size(); CC++)
{
delete temp[CC];
}
return 0;
}
我想刪除分配給NEW的所有新對象,但是我不知道如何正確執行。
您分配給new的唯一對象是std::vector<node> *temp;
。 您可以使用delete temp;
刪除它delete temp;
向量自己的析構函數將處理其內容的破壞。 但是,每次調用new時,都必須這樣做。 在這種情況下,您需要分配內部循環,因此您需要在循環結束時調用delete。
但是因為temp
僅在作用域內使用,所以無需動態分配它。 您可以像這樣在堆棧上分配它: std::vector<node> temp;
。 然后,當它超出范圍時(在這種情況下,在函數末尾)它將被自動銷毀。
在您的代碼中,您分配了temp 10次,但由於沒有將它們的指針存儲在任何地方(因此無法再刪除它們),因此您首先泄漏了9次。 您始終會覆蓋先前溫度的指針。 在代碼末尾,您嘗試刪除最后一個臨時文件的內容(因為內容不是指針,所以不能刪除),而不是向量本身。
要實現您要執行的操作,您需要做的是將所有臨時指針存儲在std::vector<std::vector<node>* >
中,最后刪除其中的每個向量。 但是,如果根本不使用任何指針,您將擁有更好的代碼。
另外,您有兩個使用相同循環變量的嵌套循環。 它可能無法按預期工作。
我想正確刪除向量的所有元素
由於分配內存的奇怪方式,不可能釋放所有內容。 您可以動態分配temp
指向的向量,然后在循環的下一個迭代中覆蓋指向該向量的指針。 就是這樣,一旦指針記錄消失,就無法釋放它。
我需要填寫結構向量的向量
在這種情況下,您應該首先創建一個vector<vector<node>>
。 如果沒有向量,則不能填充向量的向量,並且當前代碼中也沒有。
如果不保存指向新創建的向量的指針,則在此處創建:
temp = new std::vector<node>;
則無法刪除它並釋放內存。
更改
std::vector<node *> vettProbX;
vettProbX.push_back(temp->data());
至
std::vector<std::vector<node> *> vettProbX;
vettProbX.push_back(temp);
那么您可以一個一個地刪除vettProbX
存儲的每個項目
for (int i = 0; i < vettProbX.size(); i++)
delete vettProbX[i];
如果您需要訪問這些內存段而不是執行
vettProbX[i]
您將不得不調用data
方法
vettProbX[i]->data()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.