【问题标题】:how to use assign elements to matrix using dynamic memory allocation?如何使用动态内存分配将元素分配给矩阵?
【发布时间】:2015-07-28 04:14:46
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void main()
{
    int **a;
    int i,j,p;

    a=(int**)malloc(3*sizeof(int*));
    for(i=0;i<3;i++)
    {
        *(a+i)=(int*)malloc(2*sizeof(int));
    }
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",(*(a+i)+j));
        }
        for(i=0;i<3;i++)
        {
            for(j=0;j<2;j++)
            {
                p=*(*(a+i)+j);
                printf("%d ",p);
            }
        }
    }
}

在这段代码中,我使用指针为我的矩阵动态分配内存......但我只能在第一行输入值,其余的指针地址正在打印,如下所示..

只取第一行元素并给出第一行的输出,但从第二行开始不取任何输入,但打印垃圾值。 帮我找出错误。 请帮我找出这段代码中的错误。

【问题讨论】:

    标签: c pointers matrix 2d


    【解决方案1】:

    您用于打印的 2 个循环应位于您用于读取输入的另一个 for 循环之外。

    喜欢

    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",(*(a+i)+j));
        }
    }
    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        {
            p=*(*(a+i)+j);
            printf("%d ",p);
        }
    }
    

    另外,根据您的程序,您使用的矩阵似乎是一个 3*3 矩阵(这意味着 9 个整数),但是您在 for 循环内只为 2 个 int 分配内存

    *(a+i)=(int*)malloc(2*sizeof(int));
    

    尝试为 3 个整数分配内存,它应该可以工作

    *(a+i)=(int*)malloc(3*sizeof(int));
    

    还有几件事

    1) 如果您只是打印值,则不需要另一个变量 p

    printf("%d ",*(*(a+i)+j));
    

    2) 您不需要键入转换 malloc() 的返回值,请参阅 this

    【讨论】:

      【解决方案2】:

      您应该更正您的代码如下:

          for(i=0;i<3;i++)
      {
          for(j=0;j<2;j++)
          {
              scanf("%d",(*(a+i)+j));
          }
      }
      
      for(i=0;i<3;i++)
      {
          for(j=0;j<2;j++)
          {
              p=*(*(a+i)+j);
              printf("%d ",p);
          }
      }
      

      首先,代码应该是:

      for(j=0; j<2; j++)
          scanf("%d", (*(a+i)+j));
      

      其次,for 循环应该放在外面。

      【讨论】:

        猜你喜欢
        • 2021-12-19
        • 1970-01-01
        • 2019-08-16
        • 1970-01-01
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        相关资源
        最近更新 更多