我的程序用于在运行时为2d数组分配内存,然后将元素放入其中然后显示它。我的编程是抛出一些例外,任何人都可以帮我识别它吗?
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
int main()
{
int i,j,row, col;
int *ptr;
printf("enter size of row and col\n");
scanf("%d%d",&row,&col);
ptr = (int *)malloc(row*col*sizeof(int));
if(ptr==NULL)
{
printf("stderr, not able to allocate memory");
exit(1);
}
else
{
printf("enter the element");
for(i=0; i<row;i++)
for(j=0;j<col;j++)
{
scanf("%d",ptr[i+j]);
}
for(i=0; i<row;i++)
{
for(j=0;j<col;j++)
printf("%d ",ptr[i+j]);
printf("\n");
}
}
}
答案 0 :(得分:1)
正如Alok正确猜到你的问题出在scanf
scanf("%d",ptr[i+j]);
对于scanf
,您需要传递变量的地址,而不是变量本身。您可以执行以下任一操作来修复代码。
scanf("%d",&ptr[i+j]);
scanf("%d",(ptr+i+j));
P.S。在编译器看来,你正在分配一个1D数组,只是在它的使用中,你正在访问它,就好像它是一个二维数组。
p.p.s正如PaulR指出的那样,你应该使用&amp; ptr [i * col + j]来正确模拟2D数组。
答案 1 :(得分:1)
scanf()
会指向其参数,因为它需要修改它们。因此,
scanf("%d", ptr[i + j]);
应该是
scanf("%d", &ptr[i + j]);
或
scanf("%d", ptr + i + j);
代替。
(如果您真的打算模拟二维数组,那么您应该使用
&ptr[i * columns + j]
无论如何 - 感谢PaulR指出这一点。)
答案 2 :(得分:1)
你对大概是二维数组ptr
的访问是非常可疑的,每次都应该像ptr[row * i + j]
一样(在修复了另一个中提到的scanf
之后)回答)。