gpt4 book ai didi

c++ - 读取指向已删除内存的指针是否未定义行为?

转载 作者:太空狗 更新时间:2023-10-29 19:39:14 25 4
gpt4 key购买 nike

考虑

Foo* f = new Foo();
delete f;
Foo* g = f;

由于我读取了指向不属于我的内存的指针,所以最终语句现在是否未定义?对我来说,它违反了最后一个规则,所以它应该是。

注意

Foo* f;
Foo* g = f;

未定义。

最佳答案

Is the final statement now undefined due to my reading a pointer to memory that I don't own?

不,声明

Foo* g = f;

本身不会调用未定义的行为。指针值的复制操作可以随时安全地完成。

但是进一步使用指针 fg 进行解引用将在 f 被删除后导致未定义的行为

您甚至可以安全地使用这些指针值,例如记录目的:

std::cout << "g = " << g << std::endl;

Note that

Foo* f;
Foo* g = f;

is undefined.

这个假设是错误的。这既不是未定义的行为,再次取消引用未初始化的指针是未定义的行为,简单的赋值不是。

关于c++ - 读取指向已删除内存的指针是否未定义行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35994608/

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