gpt4 book ai didi

c++ - 在内存中的预定位置构造的对象 - SEGFAULT

转载 作者:行者123 更新时间:2023-11-27 23:05:34 24 4
gpt4 key购买 nike

我有这段代码

int main()
{
int *b = new int(8);
cout<<" &b = "<<b<<endl;
delete b;
void *place = (void*)0x3c0fa8; //in my output i am getting this value in &b
int *i = new(place) int(8);

system("PAUSE");
return 0;
}

我的疑问是我已经为“b”分配了空间,然后删除了它,现在如果我分配另一个整数空间,它会出现与之前分配的相同位置,现在如果我强行将整数值赋给这个值(删除后),我收到 SEGFAULT。

这段代码有什么问题?

谢谢。

最佳答案

不能保证每次 b 都会分配到相同的内存位置,事实上这种情况非常罕见,您不应该依赖它。

对于这种情况,place 实际上指向一个无效地址,访问它会导致段错误。

即使 place 指向分配了 b 的相同位置,在删除 b 之后,内存将被取消分配并且不属于到你的程序。在执行 int *i = new(place) int(8); 之前,该内存位置可能已被任何其他进程分配。因此再次访问它会导致段错误。

关于c++ - 在内存中的预定位置构造的对象 - SEGFAULT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23822312/

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