这段代码为什么在 win 和 Linux 下结果不一样

2018-09-19 09:24:40 +08:00
 zynlp
#include <iostream>

using namespace std;

struct A{
    const char* a;
};

void f(A* a){
    string s("abc");
    a->a = s.c_str();
}

int main(int argc, char* argv[]){
    A a;
    f(&a);
    printf("a: %s\n", a.a);
    return 0;
}

这属于 ub 的问题吗?

4834 次点击
所在节点    C
25 条回复
tourist2018
2018-09-19 15:15:34 +08:00
@zivyou #6 和操作系统应该没关系 和编译器有关系 而且可以直接使用 printf 方法么?这不是 stdio.h 里面的库函数?
wwqgtxx
2018-09-19 17:49:44 +08:00
@tourist2018 有些编译器的 iostream 文件中会导入 cstdio 所以可以直接用
neptuno
2018-09-19 17:59:24 +08:00
编译器不一样。有些未定义行为在不同编译器不一样的
iceheart
2018-09-19 23:17:02 +08:00
这不是 ub,这是野指针
msg7086
2018-09-20 00:34:50 +08:00
刚想说,这就是野指针啊。(然后楼上说了。)
随便指向内存中一块不属于你的地址,出来的是啥就是啥。
如果内核看你不爽,可以直接杀掉你的进程。如果他没那么凶,那就让你随便读点内存里的辣鸡数据。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/490680

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX