2009-03-02 36 views
0

搜索了一段時間,但我不明白爲什麼這會引發總線錯誤。「總線錯誤」訪問結構集<int>

任何幫助將不勝感激。

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

回答

9

malloc不初始化它分配的內存。嘗試新的。

+0

謝謝。這就是我試圖寫C的原因。 – 2009-03-02 09:04:48

1

還要注意,「總線錯誤」通常意味着「未對齊的內存讀取」。也就是說,試圖從地址0x1001加載int32將導致許多體系結構上出現總線錯誤(因爲32位字的操作需要一個對齊的地址)。這通常是你試圖解引用虛假指針的一個贈品。

莫里斯明確指出了這個問題的主要原因,但是考慮到「總線錯誤」 - >「假指針」可以幫助追蹤這種事情。

+0

「segfault」也一樣。問我怎麼知道:) – gbarry 2009-04-16 06:43:29

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