如何使用动态内存分配将元素赋值给矩阵?

时间:2015-07-28 04:14:47

标签: c pointers matrix 2d

#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);
            }
        }
    }
}

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

仅获取第一行元素并给出第一行的输出,但是第二行以后没有输入但是打印了垃圾值。 帮我弄清楚错误。 请帮我弄清楚这段代码中的错误。

2 个答案:

答案 0 :(得分:0)

您用于打印的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个整数),但是您只在int内为for分配内存{1}}循环

*(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

答案 1 :(得分:0)

您应该更正以下代码:

    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循环应放在外面。