为什么我得到一个无效的指针?

iam*_*sgt 1 c++ free pointers glibc

我正在为家庭作业写一个回溯问题,除了我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;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

***glibc检测到***./Assg4:free():无效指针:0xbfc7098f***

该函数在某些时候backtrack()仅填充数组的内容a[],它不会以任何方式删除,扩展或收缩数组.我知道问题在于最后的删除,因为当我将它们注释掉时,我没有得到任何错误(并且所有计算的结果都是正确的).我究竟做错了什么?

Pastebin完整文件:

Assg4.cc

backtrack.cc&backtrack.h

Tus*_*har 5

很确定你的错误实际上在这里:

delete continuance;
Run Code Online (Sandbox Code Playgroud)

你试图删除在堆栈上分配的东西,因为continuance指向finished堆栈的分配(没有调用new).堆栈上的项目将在超出范围时自动销毁,因此您不必担心删除continuance.

请参阅:堆栈和堆的内容和位置