gpt4 book ai didi

c++ - 超越结构的一个元素以查看另一个元素是否合法?

转载 作者:可可西里 更新时间:2023-11-01 17:04:21 25 4
gpt4 key购买 nike

给出以下人为设计的示例代码:

struct abc
{
int x[5];
int y[5];
};

void main()
{
struct abc test;
test.y[0] = 10;
printf("%n", test.x[5]);
}

程序的输出是10。

虽然这不是最佳编程实践,但确实有效。然而,这是编译器和平台的产物,还是合法代码? (即由 C 标准定义?)

即使不能保证结果为 10,是否存在这样的“非法”实例(即写入我不“拥有”的内存)?

最佳答案

不,它既不合法也不保证有效。编译器可以将填充添加到结构中,以帮助对齐,具体取决于体系结构等。

编辑:总结这些评论中的一些内容并澄清...

我确实相信你“拥有”那里的内存,因为正如 edA-qa mort-ora-y 指出的那样,结构的 memcpy() 需要/应该工作。不过,我不确定这在何处得到特别保证。

也就是说,要不惜一切代价避免未定义的行为。具有未定义行为的程序的行为可能会在相隔五秒的同一代码的两次单独运行之间发生变化。它可能会导致您的程序出现细微的内存损坏、段错误,或者运行得很好,但没有理由使用依赖于未定义行为的代码。

关于c++ - 超越结构的一个元素以查看另一个元素是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8490946/

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