[英]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.