【问题标题】:allocates memory for a 2D array为二维数组分配内存
【发布时间】:2015-02-01 04:07:39
【问题描述】:

我正在为 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++;
}

【问题讨论】:

  • 假设您拥有int **table,这看起来不错。您的意思是在向这个二维数组输入值时,即使在输入 4*4 之后,您也会看到更多的输入被询问?
  • 我有 int** 表。是的,我看到了更多的输入。令人困惑
  • 你能展示一下你是如何向这个数组输入值的代码吗?
  • “看起来你有超过 4 列”到底是怎么回事?
  • 在这个二维数组的例子中,你可能会看到指向第二维的元素,记住当你以这种方式分配一个数组时,每个table[n]实际上都是一个指针,并且不会包含您的实际数据元素之一。

标签: c memory-management multidimensional-array


【解决方案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;
}

【讨论】:

  • 谢谢,我会试试,让你知道
  • 它在这里工作......但如果我将表格发送到另一个函数它不起作用 for 循环打印其他东西
  • 那么这部分有问题,你应该问一个单独的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 2020-07-11
相关资源
最近更新 更多