Pergunta

Procurado por um tempo, mas eu não consigo descobrir por que isso iria levantar um erro de bus.

Qualquer ajuda seria muito apreciada.

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

Solução

malloc não inicializar a memória que ele aloca. tente com o novo.

Outras dicas

É possível inicializar o conjunto, se você realmente tem que usar malloc por algum motivo:

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

Note também que "erro de bus" geralmente significa "memória desalinhado ler." Ou seja, tentar carregar um int32 do endereço 0x1001 irá causar um erro de bus em muitas arquiteturas (porque a-32-bit palavra de carga op espera um endereço alinhado). Isso é geralmente uma oferta que você está tentando excluir a referência um ponteiro falso.

Maurice tem claramente pregado a causa primária do problema aqui, mas o pensamento "erro de bus." -> "ponteiro falso" pode ajudar a controlar esse tipo de coisa para baixo no futuro

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top