私が思いついた私の問題の最低限のインスタンスを返した後、次のとおりです。セグメンテーションフォールト整列構造
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();
作品。
終了する前にバーを削除すると何か違いはありますか? –
@BarışUşaklı:Nope。問題は 'return foo;'ステートメントとまったく同じです。たとえば、 'return Foo(0.0f、0.0f、0.0f);と置き換えると、問題はなくなります。 – mrhania
適切なバグサイトでバグとして報告しますか?これはバグを報告する場所ではありません。 –