Die minimale Instanz meines Problems zurückkehren, die ich mit kam sich wie folgt:Segmentation fault nach einer ausgerichteten Struktur
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;
}
Dieses Stück Code führt zu einer Segmentierung Fehler bei der Ausführung, wenn 3.4 mit clang++
(Version kompiliert, der Standard, der in Ubuntu 14.04 verfügbar ist). Das Problem tritt nicht auf, wenn ich dies mit g++
(Version 4.8.4) kompiliere. Ist das ein Compilerfehler oder gibt es ein Problem mit meinem Code?
Als Randbemerkung: Das Programm stürzt nicht ab, wenn bar
wird Stack zugewiesen, d.h .:
Bar bar(Foo(0.0f, 0.0f, 0.0f));
bar.bar();
Arbeiten wie vorgesehen.
Macht es einen Unterschied, wenn Sie bar vor dem Beenden löschen? –
@ BarışUşaklı: Nein. Das Problem ist genau mit der Anweisung 'return foo;'. Wenn ich es zum Beispiel durch 'return Foo (0.0f, 0.0f, 0.0f);' ersetzen, ist das Problem weg. – mrhania
Raise es als ein Fehler auf der entsprechenden Seite Bug? Dies ist kein Veranstaltungsort für Fehlerberichte. –