2016-06-26 3 views
0

Моя программа продолжает сбой, когда x = 2 и y = 6cellChargeTime[x][y].push_back(0); Любые идеи о том, как исправить это или что может быть причиной этого сбоя.Нарушение прав доступа при записи двумерных векторов

vector<int> **cellChargeTime; 

cellChargeTime = new vector<int>*[xMax]; //xMax = 40 
for (int x=0; x<xMax; x++) 
    cellChargeTime[x] = new vector<int> [yMax]; //yMax = 40 

for (int x=0; x<xMax; x++){ 
    for (int y=0; y<yMax; y++){ 
     for (int i=0; i< numRuns; i++){ //numRuns = 1 
      cellChargeTime[x][y].push_back(0); // Crashes at x = 2; y = 6 
     } 
    } 
} 
+1

[Не удалось воспроизвести] (HTTP: //melpon.org/wandbox/permlink/294tgg63sgMYsCQY). Не могли бы вы опубликовать [Минимальный, * Полный * и Подтверждаемый пример] (http://stackoverflow.com/help/mcve)? – MikeCAT

+0

Почему на земле 'vector ** cellChargeTime;' ?? –

+0

@MikeCAT Я не могу воспроизвести проблему после компиляции вышеуказанного кода вне моей основной функции. Во всяком случае, это то, что я получаю. __gnu_cxx :: new_allocator :: deallocate (this = 0x485708245c894890, __p = 0x8b48000000e0ec81) – Far

ответ

0

Там нет никаких проблем с кодом, как показано на рисунке, он отлично работает (при условии, что у вас достаточно delete[] заявления, когда вы закончите с помощью cellChargeTime).

Однако, я хотел бы предложить другой подход к управлению памятью:

vector<vector<int> > cellChargeTime; 

cellChargeTime.resize(xMax); 
for (int x=0; x<xMax; x++) 
    cellChargeTime[x].resize(yMax); 

Ваш цикл для заполнения векторов не меняется вообще:

for (int x=0; x<xMax; x++){ 
    for (int y=0; y<yMax; y++){ 
     for (int i=0; i< numRuns; i++){ //numRuns = 1 
      cellChargeTime[x][y].push_back(0); 
     } 
    } 
} 
Смежные вопросы