2012-12-04 287 views
0

我有这样的代码来分配和初始化:C++删除动态矩阵

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值失败。

任何想法?

+3

无关:删除空指针没有不良的副作用,所以检查完全是多余的和不必要的。 –

+0

但是如果nw = NULL,是“delete [] nw [w];”安全? – John

回答

6

new[]使用delete[],所以更改为:

delete[] nw[w]; 

,记得delete[] nw;

注意的0到阵列中的每个int个人分配可以被替换为:

nw[w] = new int[K](); // This value initializes the array, in this 
       //^^  case sets all values to zero. 

你能避免明确处理动态分配与std::vector<std::vector<int>>

std::vector<std::vector<int>> nw(V, std::vector<int>(K)); 
+0

我改为: 删除[] nw [w]; 并且错误仍在继续。 我使调试和它崩溃。对于某些w的值运行良好,但不适用于其他 – user1705996

+0

@ user1705996,请参阅http://ideone.com/Ju5MvX。 'nw'是班级成员吗?如果是这样,它是_definitely_正在初始化? – hmjd

+0

nw是一个类的属性: class model { public: ... int ** nw; ... } 我打印值和所有值都为0 (一想,我不明白的是:例如:我执行它,它崩溃时,w的值为30 ,如果我再次执行它,崩溃为w的不同值,例如15或40) – user1705996

1

我认为你的意思使用delete[],而不是delete

for (int w = 0; w < V; w++) 
    delete[] nw[w]; 
delete[] nw; 
+0

我改为:delete [] nw [w];并且错误继续。我做调试,它崩溃。对于某些w的值运行良好,但不适用于其他值 – user1705996