我有这个代码来分配和初始化:
nw = new int*[V];
for (w = 0; w < V; w++) {
nw[w] = new int[K];
for (k = 0; k < K; k++)
nw[w][k] = 0;
}
这是为了释放记忆:
if (nw) {
for (int w = 0; w < V; w++) {
if (nw[w])
delete nw[w];
}
程序编译并运行,但是,当它尝试释放内存时,会失败。 程序并不总是以相同的w值失败。
有什么想法吗?
答案 0 :(得分:6)
当new[]
使用delete[]
时,请更改为:
delete[] nw[w];
并记得delete[] nw;
。
请注意,数组中每个0
的{{1}}的单独分配可以替换为:
int
您可以避免使用std::vector<std::vector<int>>
明确处理动态分配:
nw[w] = new int[K](); // This value initializes the array, in this
//^^ case sets all values to zero.
答案 1 :(得分:2)
我认为您打算使用delete[]
,而不是delete
:
for (int w = 0; w < V; w++)
delete[] nw[w];
delete[] nw;