Redian新闻
>
问个C++中重复删除指针的问题
avatar
问个C++中重复删除指针的问题# Programming - 葵花宝典
f*w
1
我知道在C++中,重复删除指针会引起不确定行为,比如下面的例子
{
int * pi = new int[10];
//....
delete [] pi;
//...
delete [] pi;
}
我的理解是这样的,第一次删除将heap上的内存交还给系统,有可能系统把这块内存写
入了新的内容,第二次删除会导致删除刚重写的内容,导致不确定行为?这样理解对马?
谢谢
avatar
t*l
2
不对。删除后pi指向不定。系统根本无法确定要删除多少,从哪里删除。
avatar
W*g
3
对.
avatar
a*l
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上的内存交还给系统,有可能系统把这块内存写
: 入了新的内容,第二次删除会导致删除刚重写的内容,导致不确定行为?这样理解对马?

avatar
o*o
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.
:
: 马?

avatar
t*l
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.
:
: 马?

avatar
D*a
7
you can delete NULL without any problems.

【在 t*****l 的大作中提到】
: what? 难道你觉得delete一个指向NULL的指针是对的?
:
: then

avatar
a*l
8
just for correction: that's not a pointer pointing to NULL, but a NULL
pointer.

【在 t*****l 的大作中提到】
: what? 难道你觉得delete一个指向NULL的指针是对的?
:
: then

avatar
h*j
9
nod

【在 D*******a 的大作中提到】
: you can delete NULL without any problems.
avatar
o*o
10
为什么需要这个函数修改入口的参数?btw这样要传指针的地址

【在 o*o 的大作中提到】
: 好奇c++为什么不设计成自动set the point to Null after delete memory?
:
: then

avatar
m*e
11
because it's stupid

【在 o*o 的大作中提到】
: 好奇c++为什么不设计成自动set the point to Null after delete memory?
:
: then

avatar
g*g
12
For efficiency I suppose.

【在 o*o 的大作中提到】
: 好奇c++为什么不设计成自动set the point to Null after delete memory?
:
: then

avatar
N*n
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

avatar
j*r
14
agree

【在 o**o 的大作中提到】
: 为什么需要这个函数修改入口的参数?btw这样要传指针的地址
avatar
c*x
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上的内存交还给系统,有可能系统把这块内存写
: 入了新的内容,第二次删除会导致删除刚重写的内容,导致不确定行为?这样理解对马?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。