程序即将发生未知异常

时间:2013-01-20 08:06:54

标签: c pointers memory-management multidimensional-array

我的程序用于在运行时为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");
        }

    }
}

3 个答案:

答案 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之后)回答)。