为2D阵列分配内存

时间:2014-12-03 14:36:06

标签: c memory-management multidimensional-array

我正在为2D数组分配内存我认为我做得很好,但是当我在内存中看起来似乎 和我写的不一样。

int size = 4;
table = (int**)malloc(size*sizeof(int*));
int i;
for (i = 0; i < size; i++)
{
    table[i] = (int*)malloc(size*sizeof(int));
}

但是当我查看调试器后,我添加了4X4 2D数组的所有元素。 好像我有超过4列。我只是以常规方式添加int

table[i][j] = num;

任何帮助将不胜感激!

感谢!

编辑:添加int的代码

int lineCounter = 0;
char line[200];
while (fgets(line, 200, fr) != NULL)
{  
    i = 0;
    char* split;
    int num;
    split = strtok(line, " ");
    sscanf(split, "%d", &num);

    table[lineCounter][i] = num;
    i++;
    for (i ; i < size; i++)
    {
        int num;
        split = strtok(NULL, " ");
        sscanf(split, "%d", &num);
        table[lineCounter][i] = num;
    }
    lineCounter++;
}

1 个答案:

答案 0 :(得分:1)

检查以下代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
   int j,i;
   int **table;
   int lineCounter = 0;
   char line[200];
   int size = 4;
   table = (int**)malloc(size*sizeof(int*));

for (i = 0; i < size; i++)
{
    table[i] = (int*)malloc(size*sizeof(int));
}

while (fgets(line, 200, stdin) != NULL)
{  
    i = 0;
    char* split;
    int num;
    split = strtok(line, " ");
    sscanf(split, "%d", &num);

    table[lineCounter][i] = num;
    i++;
    for (; i < size; i++)
    {
        int num;
        split = strtok(NULL, " ");
        sscanf(split, "%d", &num);
        table[lineCounter][i] = num;
    }
    lineCounter++;
}

for(i=0;i<4;i++)
{
  for(j=0;j<4;j++)
  printf("%d ",table[i][j]);
  printf("\n");
}
return 0;
}