簡體   English   中英

2D動態數組程序崩潰

[英]2d dynamic array program crashes

我編寫了一個動態分配的2D數組,由於某種原因,它無法正常運行。 我分配了一個14x5數組來存儲值。

這是代碼:

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int i, j, count, count2;
   int size, keysize, column;

   size = 7;  keysize = 10; column = 5;
   int row = (size * keysize) / column;  // 14

   char **arr = (char **)malloc(column * sizeof(char *));
   for(i=0; i<row; i++)
      arr[i] = (char *)malloc(row * sizeof(char *));

   count=0;
   count2=0;

   for(i=0; i<keysize; i++)
   {
      for(j=0; j<size; j++)
      {
         printf("arr[%d][%d]=", count2, count);
         arr[count2][count] = 'C';
         printf("%c\n", arr[count2][count]);
         count++;

         if(count == 5)
         { 
            count = 0;
            count2++;
         }
      }
   }
   return 0;
}

當在位置arr [6] [0]插入一個值時,程序似乎崩潰了。 在此之前,它可以正常工作。 我插入了一些printf語句來捕獲這種情況。

我不確定為什么這樣做,內存分配對我來說很好,但我不是專家。

謝謝你的幫助。

改成

char **arr = (char **)malloc(row * sizeof(char *));
for(i=0; i<row; i++)
   arr[i] = (char *)malloc(column * sizeof(char));

我注意到用c ++標簽標記的問題,在c ++中執行此操作的明確方法是使用std::vector 所以我在回答這個問題,就好像是一個C問題:

您似乎沒有在此處分配足夠的空間。

column = 5;
char **arr = (char **)malloc(column * sizeof(char *));

這為5個指向行的指針留出空間。 然后,當您循環時:

for(i=0; i<keysize; i++)//note keysize is 10
{
    for(j=0; j<size; j++){ // note size is 7
        arr[count2][count];
        count++;
        if(count == 5){
            count = 0;
            count2++;//gets incremented every time the inner loop runs
        }
    }
}

由於每次內部循環運行時count2都會遞增,因此最終它將與keysize一樣大。 這意味着arr[keysize][0]必須有效,但這不是因為您實際上是arr[5][14] 第一個失敗是當您調用arr [6] [0]時,該錯誤將訪問數組的末尾並導致程序崩潰。

如果此處要初始化變量,然后要解決此問題,則可能要遍歷用於分配內存的相同維度值。

暫無
暫無

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

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