& # 8220; Erreur de bus & # 8221; accès à un ensemble < int > à partir d'une structure

StackOverflow https://stackoverflow.com/questions/601680

  •  03-07-2019
  •  | 
  •  

Question

J'ai cherché pendant un moment, mais je ne comprends pas pourquoi cela provoquerait une erreur de bus.

Toute aide serait très appréciée.

typedef struct {
   set<int> pages;
} someStruct;
...
void someFunction() {
   ...
   someStruct *a = createSomeStruct(); // just mallocs and returns
   a->pages.insert(5);
   ...
}
Était-ce utile?

La solution

malloc n'initialise pas la mémoire allouée. essayez avec nouveau.

Autres conseils

Il est possible d'initialiser l'ensemble, si vous devez réellement utiliser malloc pour une raison quelconque:

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;
}

Notez également que "" erreur de bus" " signifie généralement "lecture mémoire mal alignée". C'est-à-dire qu'essayer de charger un int32 à partir de l'adresse 0x1001 provoquera une erreur de bus sur de nombreuses architectures (car le mot load-32-bit attend une adresse alignée). C'est généralement un cadeau que vous essayez de déréférencer un pointeur factice.

Maurice a clairement indiqué la cause première du problème ici, mais en pensant "erreur de bus" - > "Pointeur factice" peut aider à suivre ce genre de chose dans le futur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top