繁体   English   中英

用多表填充二维数组

filling 2d array with mutiplicatio table

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

int** createMatrix(int n)
{
   int i, a, **tab,x;
   tab=(int**)malloc(n*sizeof(int*));
   if(tab==0)
   {
      return NULL;
      free(tab);
   }
   for(i=0;i<n;i++)
   {
      tab[i]=(int*)malloc(n*sizeof(int));
      if(tab[i]==NULL)
      {
         for(x=0;x<i;x++)
         {
            free(tab[x]);
         }
         free(tab[i]);
         return NULL;

      }
   }
}

void fillMatrix(int*** tab, int n)
{
   int i, a;
   for(i=0;i<n;i++)
   {    
      for(a=0;a<n;a++)
      {
         *tab[i][a]=(a*i);
      }
   }
}

int main()
{
   int roz, **tab,i,x;
   printf("size of the array: \n");
   scanf("%d",&roz);
   tab=createMatrix(roz);
   if(tab==NULL)
   {
      printf("error");
      return -1;
   }
   fillMatrix(&tab, roz);
   for(i=0;i<roz;i++)
   {
      printf("\n");
      for(x=0;x<roz;x++)
         printf("%d",tab[i][x]);
   }
   return 0;
}

嗨! 我需要编写一个程序来制作2D数组,并且我想用乘法表填充它们。 程序编译时没有任何警告或错误,但在puttintan输入后崩溃。 顺便说一句,您能告诉我为什么我必须在fillMatrix中放入3x *吗?

4 个回复
int** createMatrix(int n)

您应该从我看不到的函数中返回双指针。

int** createMatrix(int n)
{
int i, a, **tab,x;
tab=(int**)malloc(n*sizeof(int*));
// Do your allocations and other stuff

return tab;
}

注意使用三重指针访问元素。 喜欢

(*tab)[i][a] = (a*i);

您可以使用doule指针本身完成工作。

顺便说一句,您能告诉我为什么我必须在***中放入***吗?

这是一个很好的问题。 顺便说一句,它提供了回答“为什么程序会崩溃”问题的关键。 程序崩溃的原因是您未正确使用矩阵:您将其视为2D指针数组,而不是指向2D数组的指针。 如果添加括号,程序将停止崩溃:

(*tab)[i][a]=(a*i);

更好的是,将程序更改为需要的**

void fillMatrix(int** tab, int n) {
    ...
    tab[i][a]=(a*i); // <<== No asterisk
}
...
fillMatrix(tab, roz); // <<== No ampersand

注意:编译程序时,应该看到“控件到达非void函数的末尾而没有返回值”。 这是因为您忘记在创建矩阵的函数末尾添加return tab

演示

你有几个问题

  1. createMatrix()函数中的无意义的free(tab) ,它在return语句之后,将永远不会执行。

  2. 你释放tab[i]元件,其是NULLcreateMatrix()您在循环内malloc数组的指针。

    你应该做的是

     free(tab); 

    代替。

  3. 您永远不会return malloc ed tab

  4. 您的fillMatrix()函数不必要地使用了一个int ***三重指针,您不需要这样做,如果您传递该指针,则可以直接修改数据。

  5. 您在fillMatrix()有运算符优先级问题

     *tab[i][a] = (a*i); 

    这并不意味着您的想法,首先应用[] ,然后使用*取消引用它,这等于

     *(tab[i][a]) = (a * i); -> *(tab[i][a]) -> tab[i][a][0] 

    你想要的是

     (*tab)[i][a] = a * i; 
  6. 打印指针后,您不会free指针。

这是您的代码,已解决所有这些问题。

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

int **createMatrix(int n)
{
    int i, **tab, x;

    tab = malloc(n*sizeof(int*));
    if (tab == 0)
        return NULL;

    for (i = 0 ; i < n ; i++)
    {
        tab[i] = malloc(n * sizeof(int));
        if (tab[i] == NULL)
        {
            for (x = 0 ; x < i ; x++)
                free(tab[x]);
            free(tab);

            return NULL;
        }
    }

    return tab;
}

void fillMatrix(int **tab, int n)
{
    int i, a;
    for (i = 0 ; i < n ; i++)
    {
        for (a = 0 ; a < n ; a++)
        {
            tab[i][a] = (a*i);
        }
    }
}

int main()
{
    int roz, **tab, i, x;

    printf("size of the array: \n");
    scanf("%d", &roz);
    tab = createMatrix(roz);
    if (tab == NULL)
    {
        printf("error");
        return -1;
    }
    fillMatrix(tab, roz);

    for (i = 0 ; i < roz ; i++)
    {
        printf("\n");
        for (x = 0 ; x < roz ; x++)
            printf("%4d ", tab[i][x]);
        printf("\n");
        free(tab[i]);
    }
    free(tab);

    return 0;
}

您询问:

顺便说一句,您能告诉我为什么我必须在fillMatrix中放入3x *吗?

那是没有必要的。 您可以使用:

void fillMatrix(int** tab, int n)
{
   int i, a;
   for(i=0;i<n;i++)
   {    
      for(a=0;a<n;a++)
      {
         tab[i][a]=(a*i);
      }
   }
}
1 填充二维数组

我有一个带人的文本文件,可供三个人使用。 每个人的属性都用逗号分隔。 看起来像这样: 我最终要完成的工作是按照姓氏的升序对这些人进行排序。 不确定我是否在考虑正确的方法,但是我想创建一个2D数组,将每个属性分配给正确的行和列。 现在我们可以忘记排序了。 如何获得每一行来 ...

2 流填充二维数组

我有以下循环,我想将其转换为并行流。 请注意, mbbVariance和nbbVariance都返回double 。 我最好的尝试是 但这不起作用。 ...

3 用随机整数填充二维数组

我正在尝试创建一个充满1到10之间的随机整数的nxn数组。当我尝试将其打印出来时,我得到的是奇数个整数未填充数组,并且从未达到正确的整数数(例如,假设5x5数组返回17个整数)。 代码段如下,假定所有变量都正确声明,除非此处包含且导入了java.util.Random。 ...

4 二维数组填充突然停止

我有一个具有两种形式的简单html,每种形式都有四个输入字段: 并且我试图在每个表单之前插入一个段落,并在每个输入字段之后插入一个跨度以显示消息: 第一种形式的字段填充得很好,但第二种形式的字段却没有填充。 我检查了一下,当它进入第二个for循环时,代码停止了,以便当f = 1 ...

5 如何动态填充二维数组

我想用这种模式显示结果集值: Object rowData[][] = { { url , tags , text }, { url , tags , text } }; 我的代码是: ...

6 如何按列填充二维数组

我有以下代码: JPanel 按行填充值。 示例输出: 我希望 JPanel 由列填充。 我尝试了不同的代码,但仍然无法弄清楚如何使其工作。 预期输出: 任何人都可以帮助我如何显示 JLabel 如上所述? ...

9 Java用随机的0和1填充二维数组

我想知道您是否可以使用Math.random方法生成随机的0和1? 我需要填充一个二维数组,使其基本上像一个迷宫,其中1表示路径,0表示壁。 ...

10 随机填充二维数组

此代码将对n &lt;20有好处,但对于n = 40则会给我带来访问冲突错误:此代码将随机填充X和O。 宣布: ...

2011-12-05 22:52:10 4 622   c++/ c
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM