[英]Why am I getting an invalid pointer?
我正在寫作業的回溯問題,除最后的delete[]
以外,所有代碼都有效。
/*Assg4.cc*/
int main()
{
//removed irrelevant code - see pastebin links if needed
void *data = &datavector;
bool finished = false;
bool* continuance = &finished;
int *a = new int[n+1];
for(int i=0; i<n; i++)
{
a[i] = NULL;
}
delete []a;
delete continuance;
return 0;
}
我收到以下錯誤:
***檢測到glibc *** ./Assg4:free():無效的指針:0xbfc7098f ***
函數backtrack()
只是在某個時刻填充了數組a[]
的內容,它沒有以任何方式刪除,擴展或縮小數組。 我知道問題出在最后,因為當我將它們注釋掉時,我沒有收到任何錯誤(而且所有計算的結果都是正確的)。 我究竟做錯了什么?
Pastebin完整檔案:
可以肯定您的錯誤實際上在這里:
delete continuance;
您正在嘗試刪除在棧中分配,因為事情continuance
點finished
,這是在棧上分配(不調用new
)。 當堆棧中的項目超出范圍時,它們將自動銷毀,因此您不必擔心刪除continuance
。
請參閱: 堆棧和堆在什么地方
bool finished = false;
bool* continuance = &finished;
delete continuance;
您正在對未使用new
分配的指針調用delete
。 這導致未定義的行為 。
finished
是一個自動/局部變量,一旦聲明它的作用域{ }
結束,它就會自動銷毀。
規則很簡單:
除非您調用new
否則不要調用delete
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.