当前位置:  开发笔记 > 编程语言 > 正文

返回对齐结构后的分段错误

如何解决《返回对齐结构后的分段错误》经验,为你挑选了0个好方法。

我想出的问题的最小例子如下:

struct __attribute__((aligned(16))) Foo {
    float x, y, z;
    Foo(float x, float y, float z) : x(x), y(y), z(z) {}
};

class Bar {
public:
    Foo foo;

    Bar(const Foo &foo) : foo(foo) {}
    Foo bar() { return foo; }
};

int main()
{
    Bar *bar = new Bar(Foo(0.0f, 0.0f, 0.0f));
    bar->bar();
    return 0;
}

如果使用clang++(版本3.4,Ubuntu 14.04中可用的默认版本)进行编译,这段代码会在运行时导致分段错误.使用g++(版本4.8.4)编译时不会发生此问题.这是编译器错误还是我的代码有问题?

作为旁注:如果bar是堆栈分配,程序不会崩溃,即:

Bar bar(Foo(0.0f, 0.0f, 0.0f));
bar.bar();

按预期工作.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有