“总线错误”访问集合< int>来自结构
题
搜索了一段时间,但我无法弄清楚为什么会引起总线错误。
非常感谢任何帮助。
typedef struct {
set<int> pages;
} someStruct;
...
void someFunction() {
...
someStruct *a = createSomeStruct(); // just mallocs and returns
a->pages.insert(5);
...
}
解决方案
malloc不会初始化它分配的内存。尝试新的。
其他提示
如果由于某种原因确实必须使用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;
}
还要注意“总线错误”。通常意味着“未对准的存储器读取”。也就是说,尝试从地址0x1001加载int32将导致许多体系结构上的总线错误(因为load-32-bit-word op需要一个对齐的地址)。这通常是一个赠品,你试图取消引用虚假的指针。
莫里斯已明确指出了问题的主要原因,但认为“总线错误” - &GT; “伪指针”可以帮助将来跟踪这类事情。
不隶属于 StackOverflow