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);
   ...
}
War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top