簡體   English   中英

為什么我得到一個無效的指針?

[英]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完整檔案:

組件4.cc

backtrack.cc和backtrack.h

可以肯定您的錯誤實際上在這里:

delete continuance;

您正在嘗試刪除在棧中分配,因為事情continuancefinished ,這是在棧上分配(不調用new )。 當堆棧中的項目超出范圍時,它們將自動銷毀,因此您不必擔心刪除continuance

請參閱: 堆棧和堆在什么地方

bool finished = false;
bool* continuance = &finished;

delete continuance;

您正在對未使用new分配的指針調用delete 這導致未定義的行為
finished是一個自動/局部變量,一旦聲明它的作用域{ }結束,它就會自動銷毀。

規則很簡單:

除非您調用new否則不要調用delete

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM