“总线错误”从结构</int>访问set <int>

时间:2009-03-02 09:00:10

标签: c++ stl struct bus-error

搜索了一段时间,但我无法弄清楚为什么会引起总线错误。

非常感谢任何帮助。

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

3 个答案:

答案 0 :(得分:9)

malloc不会初始化它分配的内存。尝试新的。

答案 1 :(得分:2)

如果由于某种原因确实必须使用malloc,则可以初始化该集:

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

答案 2 :(得分:1)

另请注意,“总线错误”通常表示“未对齐的内存读取”。也就是说,尝试从地址0x1001加载int32将导致许多体系结构上的总线错误(因为load-32-bit-word op需要一个对齐的地址)。这通常是一个赠品,你试图取消引用虚假的指针。

莫里斯已经在这里明确指出了问题的主要原因,但是想到“总线错误” - &gt; “伪指针”可以帮助将来跟踪这类事情。