"Bus error" tilgang til et sett <int> fra en struct

stemmer
0

Søkte etter en stund, men jeg kan ikke finne ut hvorfor dette ville øke bussfeil.

Eventuelle hjelpe ville være mye verdsatt.

typedef struct {
   set<int> pages;
} someStruct;
...
void someFunction() {
   ...
   someStruct *a = createSomeStruct(); // just mallocs and returns
   a->pages.insert(5);
   ...
}
Publisert på 02/03/2009 klokken 09:00
kilden bruker
På andre språk...                            


3 svar

stemmer
9

malloc ikke initialisere minnet det tildeler. prøv med nye.

Svarte 02/03/2009 kl. 09:01
kilden bruker

stemmer
2

Det er mulig å initial settet, hvis du virkelig trenger å bruke malloc eller annen grunn:

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;
}
Svarte 02/03/2009 kl. 09:16
kilden bruker

stemmer
1

Merk også at "bus error" vanligvis betyr "feiljustert minne lese." Det vil si, prøver å laste en int32 fra adresse 0x1001 vil føre til en bussfeil på mange arkitekturer (fordi den last 32-bit-ord op forventer en fluktende adresse). Det er vanligvis en giveaway som du prøver å dereference en falsk pekeren.

Maurice har klart spikret den primære årsaken til problemet her, men tenker "bus error" -> "falsk pekeren" kan hjelpe spore denne typen ting ned i fremtiden.

Svarte 02/03/2009 kl. 09:16
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more