„Busfehler“ einen Satz Zugriff auf von einer Struktur
Frage
für eine Weile gesucht, aber ich kann nicht herausfinden, warum dies einen Bus-Fehler erhöhen würde.
Jede Hilfe wäre sehr geschätzt werden.
typedef struct {
set<int> pages;
} someStruct;
...
void someFunction() {
...
someStruct *a = createSomeStruct(); // just mallocs and returns
a->pages.insert(5);
...
}
Lösung
malloc nicht initialisiert den Speicher es zuordnet. versuchen, mit neuen.
Andere Tipps
Es ist möglich, den Satz zu initialisieren, wenn Sie wirklich aus irgendeinem Grunde malloc müssen verwenden:
typedef struct {
set<int> pages;
} someStruct;
...
void someFunction() {
...
someStruct *a = createSomeStruct();
a->pages.insert(5);
...
}
...
someStruct *createSomeStruct(void) {
someStruct *a = (someStruct *) malloc(sizeof(*a));
new(&a->pages) set<int>;
return a;
}
Beachten Sie auch, dass „Busfehler“ in der Regel bedeutet „falsch ausgerichteter Speicher gelesen.“ Das heißt, versucht, eine int32 von Adresse 0x1001 laden einen Bus-Fehler auf vielen Architekturen führen (da das Last-32-Bit-Wort op erwartet eine ausgerichtete Adresse). Das ist in der Regel ein Werbegeschenk, das Sie zu dereferenzieren einem falschen Zeiger versuchen.
Maurice hat die primäre Ursache des Problems hier deutlich genagelt, aber „Busfehler“ denken. -> „Schein Zeiger“ helfen, diese Art der Sache verfolgen können nach unten in der Zukunft