2016-06-26 8 views
0

私のプログラムは、これを修正する方法やこのクラッシュを引き起こしている可能性のあることについてのアイデアについては、x = 2y = 6cellChargeTime[x][y].push_back(0);2次元ベクトルを書き込むときのアクセス違反

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)。 [Minimal、* Complete *、およびVerifiable example](http://stackoverflow.com/help/mcve)を投稿してもよろしいですか? – MikeCAT

+0

なぜ地球上にあるのですか? ** cellChargeTime; '?? –

+0

@MikeCAT主な機能の外で上記のコードをコンパイルすると、問題を再現できません。とにかく、これは私が得るものです。 __gnu_cxx :: new_allocator :: deallocate(this = 0x485708245c894890、__p = 0x8b48000000e0ec81) – Far

答えて

0

示すように、コードに問題がない、それは(あなたがcellChargeTimeを使用して行われたときに、十分なdelete[]文を持って)正常に動作します。

しかし、私はメモリ管理のための別のアプローチを示唆している:

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); 
     } 
    } 
} 
関連する問題