gpt4 book ai didi

c++ - 这是 gcc 优化错误吗?

转载 作者:太空狗 更新时间:2023-10-29 21:49:41 26 4
gpt4 key购买 nike

<分区>

这是我的代码:

bool func(const MY_STRUCT *const ptr, some_struct *x, int y)
{
printf("IN: %p\n", ptr); // ok
for (int i = 0; i < y; ++i) {
if (ptr->foo(x[i].key) == 0) {
return false;
}
}
printf("OUT: %p\n", ptr); // ok
return true;
}

void process(void)
{
... ...
for (i = 0; i < num; ++i) {
MY_STRUCT *ptr = obj->GetPtr(); // success
printf("BEFORE: %p\n", ptr); // ok
if (func(ptr, x, y) == false) {
continue;
}
printf("AFTER: %p\n", ptr); // <nil> when compile with -O2
printf("%s", ptr->data); // *** segment fault here ***
}
}

输出:

BEFORE: 0x0612d3fa
IN: 0x0612d3fa
OUT: 0x0612d3fa
AFTER: <nil>
segment fault

如果我用 -O0 编译上面的代码,一切正常。但是,如果我用 -O2 编译它,在调用函数 func 之后,ptr 变为 NULL!

这是 gcc 错误吗?有没有人遇到过类似的错误?

我的 gcc 版本是:gcc version 3.4.5 20051201 (Red Hat 3.4.5-2)

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