【问题标题】:double dimensional array as return value二维数组作为返回值
【发布时间】:2012-11-11 17:34:09
【问题描述】:

对于我的作业,我必须从输入文件中读取数据并将其存储在一个二维数组中,然后将该数组传递给另一个函数。这是我到目前为止所尝试的,但我不知道当我在 main 中调用这个函数时它会给出错误:

访问冲突写入位置0x00000000。

我试图动态分配内存,但它给出了同样的错误。我做错了什么?

最后一次更新代码:

 #include<stdio.h>
 #include<stdlib.h>

int *a[2];
void getData(void)
{
    FILE *fp = fopen("input.txt", "r");
    int number;

    fscanf(fp, "%d", &number);


    for (int i = 0; i < number; i++)
    {
        a[i]=(int*)malloc(number * sizeof (int));
        fscanf(fp, "%d %d", &a[i][0], &a[i][1]);
    }
    fclose(fp);
}


int main()
{   
    getData();
    for(int i=0;i<8;i++)
    {
        printf("%d %d\n",a[i][0],a[i][1]);
    }
}

【问题讨论】:

    标签: c


    【解决方案1】:

    你需要为a分配内存

    for循环之前

    a = (int **)malloc(number * sizeof(int *))
    

    【讨论】:

    • @Kirilenko - 是的,它在 C 中没用。但由于他在原始代码中有类似的演员表,我想他可能是在 C++ 上编译。
    【解决方案2】:

    您没有分配第一个维度,即当您尝试取消引用时 a 是一个空指针。

    #include <stdlib.h>
    a = malloc(number * sizeof *a);
    

    顺便说一句,sizeof(int) 不足以存储两个数字。

    #include <stdlib.h>
    a[i] = malloc(2 * sizeof *a[i]); 
    fscanf(iFile, "%d %d", &a[i][0], &a[i][1]);
    

    这是一个完全正确的代码(虽然不完美,只要a 是一个非常大的全局变量):

    int (*a)[2] = NULL;
    
    void getData(void)
    {
        FILE *fp = fopen("input.txt", "r");
        int number;
    
        fscanf(fp, "%d", &number);
        a = malloc(number * sizeof *a);
    
        for (int i = 0; i < number; i++)
            fscanf(fp, "%d %d", &a[i][0], &a[i][1]);
    
        fclose(fp);
    }
    

    【讨论】:

    • 它仍然无法正常工作并且它给出了同样的错误。可能是我的功能出了点问题。
    • 我已经测试过了,它按我的预期工作。你的校验码是多少?
    • a = malloc(number * sizeof a) -> “void *”类型的值不能分配给“int()[2]”类型的实体->这是第一个错误
    • 你确定你在 C 上编译吗?
    • 我发现了一种使用 sizeof 运算符的新方法。
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 2016-04-14
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多