f**********w 发帖数: 93 | 1 我知道在C++中,重复删除指针会引起不确定行为,比如下面的例子
{
int * pi = new int[10];
//....
delete [] pi;
//...
delete [] pi;
}
我的理解是这样的,第一次删除将heap上的内存交还给系统,有可能系统把这块内存写
入了新的内容,第二次删除会导致删除刚重写的内容,导致不确定行为?这样理解对马?
谢谢 |
t*****l 发帖数: 121 | 2 不对。删除后pi指向不定。系统根本无法确定要删除多少,从哪里删除。 |
W*********g 发帖数: 409 | |
a****l 发帖数: 8211 | 4 right. So, it is a good habit to set point to NULL after releasing it, then
you won't have this problem any more.
马?
【在 f**********w 的大作中提到】 : 我知道在C++中,重复删除指针会引起不确定行为,比如下面的例子 : { : int * pi = new int[10]; : //.... : delete [] pi; : //... : delete [] pi; : } : 我的理解是这样的,第一次删除将heap上的内存交还给系统,有可能系统把这块内存写 : 入了新的内容,第二次删除会导致删除刚重写的内容,导致不确定行为?这样理解对马?
|
o*o 发帖数: 404 | 5 好奇c++为什么不设计成自动set the point to Null after delete memory?
then
【在 a****l 的大作中提到】 : right. So, it is a good habit to set point to NULL after releasing it, then : you won't have this problem any more. : : 马?
|
t*****l 发帖数: 121 | 6 what? 难道你觉得delete一个指向NULL的指针是对的?
then
【在 a****l 的大作中提到】 : right. So, it is a good habit to set point to NULL after releasing it, then : you won't have this problem any more. : : 马?
|
D*******a 发帖数: 3688 | 7 you can delete NULL without any problems.
【在 t*****l 的大作中提到】 : what? 难道你觉得delete一个指向NULL的指针是对的? : : then
|
a****l 发帖数: 8211 | 8 just for correction: that's not a pointer pointing to NULL, but a NULL
pointer.
【在 t*****l 的大作中提到】 : what? 难道你觉得delete一个指向NULL的指针是对的? : : then
|
h**j 发帖数: 2033 | 9 nod
【在 D*******a 的大作中提到】 : you can delete NULL without any problems.
|
o**o 发帖数: 3964 | 10 为什么需要这个函数修改入口的参数?btw这样要传指针的地址
【在 o*o 的大作中提到】 : 好奇c++为什么不设计成自动set the point to Null after delete memory? : : then
|
|
|
m*****e 发帖数: 4193 | 11 because it's stupid
【在 o*o 的大作中提到】 : 好奇c++为什么不设计成自动set the point to Null after delete memory? : : then
|
g*****g 发帖数: 34805 | 12 For efficiency I suppose.
【在 o*o 的大作中提到】 : 好奇c++为什么不设计成自动set the point to Null after delete memory? : : then
|
N********n 发帖数: 8363 | 13
It doesn't make much difference. If two pointers point to the same
object, setting one of them to null after deletion still leaves the
other one out.
【在 o*o 的大作中提到】 : 好奇c++为什么不设计成自动set the point to Null after delete memory? : : then
|
j****r 发帖数: 28 | 14 agree
【在 o**o 的大作中提到】 : 为什么需要这个函数修改入口的参数?btw这样要传指针的地址
|
c********x 发帖数: 84 | 15
马?
First, the program can't be compiled, it should be:
int[] *pi = new int[10];
second, system will recycle the block of memory until the program exit, so
the rewrite the block won't happen.
【在 f**********w 的大作中提到】 : 我知道在C++中,重复删除指针会引起不确定行为,比如下面的例子 : { : int * pi = new int[10]; : //.... : delete [] pi; : //... : delete [] pi; : } : 我的理解是这样的,第一次删除将heap上的内存交还给系统,有可能系统把这块内存写 : 入了新的内容,第二次删除会导致删除刚重写的内容,导致不确定行为?这样理解对马?
|