“バスエラー”セットへのアクセス< 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