我正在写作业的回溯问题,除结尾处的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;
}

我收到以下错误:



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

Pastebin完整文件:

Assg4.cc

backtrack.cc & backtrack.h

最佳答案

可以肯定您的错误实际上在这里:

delete continuance;

您正在尝试删除分配在堆栈上的内容,因为continuance指向finished,它是在堆栈上分配的(不调用new)。堆栈中的项目超出范围时将自动销毁,因此您不必担心删除continuance

另请:What and where are the stack and heap

10-08 11:06