//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,但它不是。我删除了这个错误吗?
答案 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实际上并没有释放内存。你正在做的事实上是泄漏整个矩阵。