gpt4 book ai didi

C++ 什么是 delete pointer,pointer=0;声明工作?它会清除内存两次吗?

转载 作者:太空狗 更新时间:2023-10-29 23:35:40 25 4
gpt4 key购买 nike

int *ptr = new int(10);    
printf("%d \n",*ptr);
delete ptr,ptr=0;
printf("%d",ptr);

输出:
10
0

我的问题是这个语句“delete ptr,ptr = 0”是如何工作的?它会释放内存两次吗?

最佳答案

指针和指针指向的内存是两个不同的东西。删除后将指针设置为 0 只是一种附加的安全机制,以确保您不会尝试使用不应该使用的内存地址。

int *ptr = new int(10);

ptr 的值类似于 0xabcd1234,但 *ptr 将为 10您可以使用内存地址 0xabcd1234“做事”,因为它已分配给您。

printf("%d\n",*ptr);
删除ptr,ptr=0;

delete ptr“归还”内存,但您仍然拥有它的地址(这很危险_.ptr = 0 意味着你忘记了地址,所以一切都很好。

我猜“诀窍”是逗号运算符:delete ptr,ptr=0; 正如其他人所说,这意味着“做左手部分,然后做右手部分”。如果您尝试获得结果(int i_know_it_is_a_stupid_example = 10,20; 结果是 RHS [20])

关于C++ 什么是 delete pointer,pointer=0;声明工作?它会清除内存两次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31714782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com