簡體   English   中英

c ++數組和內存錯誤

[英]Error with c++ Arrays and Memory

我一直在努力將自己創建的批處理游戲轉換為c ++,以使其進一步發展,但遇到了許多問題,其中之一就是nodeMatrix(世界地圖)所需的數組。 我需要一張100 x 100的地圖,每米20個數據值。

 int nodeMatrix[99][99][19];

但是它的問題是當我嘗試設置地圖的null(或未生成)狀態時,它會崩潰,並顯示為(0xC0000005),因此我在腳本中添加了一個視覺效果,用於打印正在重置的當前節點(不過速度要慢得多) ,

void emptydata(){

  int temp_x = 0;

  int temp_y = 0;

  int temp_t = 0;

  do{

     temp_y = 0;

     do{

         temp_t = 0;

         do{

             nodeMatrix[temp_x][temp_y][temp_t] = 0;

             //visual

             cout << temp_x << " " << temp_y << " " << temp_t << endl;

             temp_t ++;

         }while(temp_t <= 50);

         temp_y ++;

     }while(temp_y <= 99);

     temp_x ++;

 }while(temp_x <= 99);

}

每次它以99 14 10崩潰(它從零開始,所以100 15 11),那將是16500位數據嗎?

無論如何,這與內存分配有關嗎? 我不知道。

聽起來您的問題是您分配了99 x 99 x 19陣列,而不是100 x 100 x 20陣列。 數組聲明采用元素數量,而不是最大索引。

我不確定您如何達到temp_y = 14和temp_t = 10,但這似乎可以通過在temp_x = 99時崩潰來確認。

如果您發布該實際錯誤消息,它將更有幫助。


看來您還將temp_t限制為50,而不是20,但是我認為這是一個錯字。 另外,作為風格注釋,for循環在c ++中更為常見,因為它們將為您處理索引。

您的定義為[99] [99] [19],但您正在檢查[100] [100] [51](while(temp_t <= 50),while(temp_y <= 99),temp_x <= 99)。

temp_t將從0變為50-> 51個元素。

temp_y將從0到99-> 100個元素。

temp_x將從0到99-> 100個元素。

當您離開陣列的保留內存時,您會得到一個受保護的內存異常...

另外,為清楚起見,請使用for循環:

int nodeMatrix[100][100][20];

for(int x = 0; x < 100; x++)
{
    for(int y = 0; y < 100; y++)
    {
        for(int z = 0; z < 20; z++)
        {
            nodeMatrix[x][y][z] = 0;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM