gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:12:15 25 4
gpt4 key购买 nike

#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 个循环应该位于您用于读取输入的另一个 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 个整数),但是您只为 2 分配内存for 循环内的 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 .

关于c - 如何使用动态内存分配将元素分配给矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31667250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com