删除数组中指针的正确方法是什么?

时间:2010-07-05 21:46:18

标签: c++ arrays

//the setup
tiles = new Tile **[num_bands];
for( int i = 0 ; i < num_bands ; i++ )
tiles[i] = new Tile *[num_spokes];  

for(int i=0; i < num_bands; i++){
    for(int ii=0; ii < num_spokes; ii++){
        tiles[i][ii] = 0; 
    }
}


 //the problem
delete tiles[1][1];

当我删除图块时,图块[1] [1]仍然保存一个地址。我认为它应该是一个空指针或0x0,但它不是。我删除了这个错误吗?

5 个答案:

答案 0 :(得分:12)

delete不应该使指针为空;如果你愿意,这是你自己的责任。

基本上,delete只是意味着“我不再需要此地址的内存,因此您可以将其用于其他内容。” - 它没有说明指向释放地址的值指针有什么用。

答案 1 :(得分:3)

删除后,C ++ delete不一定将地址设置为NULL,如下所述:in a previous SO question

答案 2 :(得分:1)

使用释放自己资源的智能指针。在C ++中,除非您明确是资源管理器类,否则通常认为处理您自己的资源非常糟糕。

答案 3 :(得分:0)

另一种说出别人指出的方式:

1)指针指向内存中的一个位置。

2)删除只是释放指针所指向的内存。但是指针仍然指向同一个地方。

3)如果你愿意,你必须自己使指针无效。

答案 4 :(得分:0)

除非我的C ++生锈,否则设置指针= 0实际上并没有释放内存。你正在做的事实上是泄漏整个矩阵。