Pregunta

Buscó por un tiempo, pero no puedo entender por qué esto generaría un error de bus.

Cualquier ayuda sería muy apreciada.

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

Solución

malloc no inicializa la memoria que asigna. prueba con el nuevo.

Otros consejos

Es posible inicializar el conjunto, si realmente tiene que usar malloc por alguna razón:

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

Tenga en cuenta también que " error de bus " por lo general significa "lectura de memoria desalineada". Es decir, tratar de cargar un int32 desde la dirección 0x1001 causará un error de bus en muchas arquitecturas (porque la operación de carga-32 bits-palabra espera una dirección alineada). Por lo general, es un regalo que estés tratando de eliminar la referencia a un indicador falso.

Maurice ha identificado claramente la causa principal del problema aquí, pero pensando "error de bus" - > " puntero falso " puede ayudar a rastrear este tipo de cosas en el futuro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top