-2

我的程序旨在在运行时为二维数组分配内存,然后将元素放入其中,然后显示它。我的 prog 抛出了一些异常,任何人都可以帮我识别它吗?

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

    }
}
4

3 回答 3

1

您对可能打算作为二维数组的访问ptr是非常可疑的,它应该ptr[row * i + j]每次都进行(在修复scanf另一个答案中提到的混乱之后)。

于 2013-01-21T14:33:01.550 回答
1

正如 Alok 正确猜测的那样,您的问题在于您调用scanf

scanf("%d",ptr[i+j]);

因为scanf您需要传递变量的地址,而不是变量本身。您可以执行以下任一操作来修复您的代码。

scanf("%d",&ptr[i+j]);

scanf("%d",(ptr+i+j));

ps minor nit,在编译器的眼中,您正在分配一个 1D 数组,只有在使用它时,您才像访问 2d 数组一样访问它。

pps 正如 PaulR 指出的,您应该使用 &ptr[i*col+j] 正确模拟二维数组。

于 2013-01-20T08:12:30.953 回答
1

scanf()需要指向其参数的指针,因为它需要修改它们。因此,

scanf("%d", ptr[i + j]);

应该

scanf("%d", &ptr[i + j]);

或者

scanf("%d", ptr + i + j);

反而。

(如果你真的打算模拟一个二维数组,那么你应该使用

&ptr[i * columns + j]

无论如何 - 感谢 PaulR 指出这一点。)

于 2013-01-20T08:13:18.637 回答