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