gpt4 book ai didi

c++ - C++中的内存分配和回收

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:48 27 4
gpt4 key购买 nike

我是 c++ 的新手,刚刚阅读了一些关于它的在线教程。我很好奇我在指针中的实验结果。这是我的代码:

int *p_value;
sizeof(*p_value) <--- I expected 0 but it shows 4
p_value = new int;
sizeof(*p_value) <--- it shows 8, make sense
delete(p_value)
sizeof(*p_value) <--- I expect 0, but it shows 4 again...

更重要的是,我不明白为什么p_value在delete操作后指向同一个内存地址。有必要是真的吗?


感谢您指出我对运算符“sizeof”的误解。但有一点我在问题中没有说得太清楚。

这是另一个代码: int *p_value = new int; cout << p_value <-- 它打印新创建的 int 的地址,比如 0x000A; 删除 p_value; cout << p_value <-- 它显示调用“删除”之前的相同地址

我想我可以考虑“删除”只是标记 0x000A 未在 Map 中占用吗?但是不会改变p_value的内容吗?

最佳答案

我认为您缺少的关键是 sizeof 不是一个函数。它不像函数那样在运行时查看其参数的,只是在编译时查看其类型

int *p_value;   
sizeof(*p_value) <--- I expected 0 but it shows 4

因为 p_value 是一个指向整数的指针,所以 *p_value 也是一个整数。整数在您的平台上是四个字节。

p_value = new int;   
sizeof(*p_value) <--- it shows 8, make sense

这很奇怪。因为 p_value 是一个指向整数的指针,所以 *p_value 也是一个整数。显然,整数在您的平台上是 8 个字节。

delete(p_value)  
sizeof(*p_value) <--- I expect 0, but it shows 4 again...

为什么你期望 0?因为 p_value 是一个指向整数的指针,所以 p_value 也是一个整数。所以它的大小是 4(或者整数在您的平台上占用的字节数)。 p_value = malloc (sizeof (*p_value)); 还怎么工作?

more importantly, I don't understand why p_value point to the same memory address after delete operation. Is it necessary to be true?

将变量的值传递给函数不会更改该变量的值。所以 delete (p_value) 不会更改 p_value 的值,只是它现在指向垃圾。

关于c++ - C++中的内存分配和回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34511235/

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