【问题标题】:unknow exception is coming for the program程序即将出现未知异常
【发布时间】:2013-01-03 13:39:27
【问题描述】:

我的程序旨在在运行时为二维数组分配内存,然后将元素放入其中,然后显示它。我的 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");
        }

    }
}

【问题讨论】:

  • scanf("%d",ptr[i+j]); 这是做什么的?
  • 请发布您遇到的实际错误。
  • 在调试器中运行它,看看哪里出错了。
  • 我觉得你非常需要再次阅读一个像样的 C 教程的相关部分。

标签: c pointers memory-management multidimensional-array


【解决方案1】:

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

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

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

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

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

附言小尼特,在编译器的眼中,您正在分配一个一维数组,它只是在使用它时才像访问二维数组一样访问它。

p.p.s 正如 PaulR 指出的,您应该使用 &ptr[i*col+j] 正确模拟 2D 数组。

【讨论】:

    【解决方案2】:

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

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

    应该是

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

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

    改为。

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

    &ptr[i * columns + j]
    

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

    【讨论】:

    • 更有可能是&amp;ptr[i * col + j]?
    • 伙计们,我知道我正在使用一维方法来遍历二维数组。我的想法是,当我可以使用指向一维数组的指针时,为什么我需要指向二维数组的指针。也感谢您的回复。
    【解决方案3】:

    您对大概打算作为二维数组ptr 的访问非常可疑,每次都应该像ptr[row * i + j] 一样(在解决了另一个答案中提到的scanf 的混乱之后)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多