“バスエラー”セットへのアクセス< int>構造体から

StackOverflow https://stackoverflow.com/questions/601680

  •  03-07-2019
  •  | 
  •  

質問

しばらく検索しましたが、なぜこれがバスエラーを引き起こすのかわかりません。

ご協力いただければ幸いです。

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; 「偽のポインター」この種のことを将来的に追跡するのに役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top