1
struct LeafDataEntry   
{
    void *key;
    int a;
};


int main(){

    //I want to declare a vector of structure
    vector<LeafDataEntry> leaves;

    for(int i=0; i<100; i++){
       leaves[i].key = (void *)malloc(sizeof(unsigned));
       //assign some value to leaves[i].key using memcpy
    }

}

上記のforループでmallocを実行しているときに、このコードでSEGFAULTエラーが発生します。構造体のベクトル内のポインターにメモリを割り当てるための代替案があります。

4

2 に答える 2

5

これは、要素がまだないベクトルに割り当てようとしているためです。代わりにこれを行ってください:

for(int i=0; i<100; i++){
    LeafDataEntry temp;
    leaves.push_back(temp); 
    leaves[i].key = (void *)malloc(sizeof(unsigned));
    //assign some value to leaves[i].key using memcpy
 }

そうすれば、実際のメモリにアクセスできます。

コメントの中で、OPは、配列内の要素の数は実行時に決定されると述べました。実行時にリストのサイズ i < someVarを決定できるように設定できます。someVar

他の答え

leaves.resize(someVar) //before the loop

それはより効率的である可能性が高いので、おそらく行くためのより良い方法です。

于 2012-11-14T23:39:37.857 に答える
2

空のベクトルにインデックスを付けています。使ってみてください

leaves.resize(100);

ループの前。

于 2012-11-14T23:40:27.427 に答える