2012-04-20 35 views
1

當我嘗試一對Vector添加我得到這個錯誤:的push_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

看起來像堆已損壞。可能不是你顯示的代碼 - 看起來沒問題。 – 2012-04-20 09:40:18

+0

push_back看起來不錯。你有沒有檢查你是否在'board'的範圍之內? – juanchopanza 2012-04-20 09:40:49

+5

嘗試用valgrind運行你的代碼,它可以告訴你發生內存錯誤的地方。到目前爲止,你還需要做什麼調試? – 2012-04-20 09:41:48

回答

1

小到最後。但是我發現在std :: pair的std :: vector中使用.reserve()可以解決問題。我仍然必須弄清楚爲什麼這個錯誤是由於stl_uninitialized.h中的錯誤而引起的,而這個錯誤會引發一個錯誤標誌。

+0

主演再檢查兩年! – Blindy 2014-06-26 19:52:22

+1

@Bindy:太棒了! – navderm 2014-06-27 14:38:53