2012-04-20 8 views
1

私はこのエラーを取得するベクトルにペアを追加しようとすると:一back用のstd :: STDにペア::ベクトル誤差

table: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed. 
Aborted 

ここでの方法である:

std::vector<std::pair <int, int> > AI::genPosNormal(int p, int dice) 
{ 
    std::vector<std::pair <int, int> > pos; 
    std::pair<int, int> step; 

    for(int i = p; i < 25-dice; i++){ 
    if(board[BLACK][i] > 0 && board[WHITE][i+dice] < 2){ 
     step.first = i; 
     step.second = dice; 
     pos.push_back(step); 
    } 
    } 
    return pos; 
} 
+2

ヒープが破損しているようです。おそらくあなたが表示するコードではないでしょう - それは大丈夫です。 –

+0

push_backは正常に見えます。あなたが「ボード」の範囲内にいることを確認しましたか? – juanchopanza

+5

valgrindでコードを実行しようとすると、メモリエラーが発生した場所を示すことができます。これまでどんなデバッグもしていますか? –

答えて

1

少し遅くまで。しかし、私はstd :: vectorの.reserve()を使ってstd :: pairの問題が解決されたことがわかりました。私はまだエラーがなぜ発生するのか把握しなければならないが、エラーフラグを立てるstl_uninitialized.hにあるようだ。

+0

2年後にチェックインするために主演! – Blindy

+1

@Blindy:awesome! – navderm

関連する問題