gpt4 book ai didi

c - 从文件读取数据以重新分配动态结构数组时出现段错误

转载 作者:行者123 更新时间:2023-11-30 15:10:24 25 4
gpt4 key购买 nike

我正在尝试将数据从文件读取到动态结构数组,数组大小通过 realloc 扩展以容纳附加数据。

它似乎适用于单行数据(数组大小为 1),但任何更大的数据都会出现段错误。我在编码方面非常缺乏经验,所以我完全不知道是什么原因造成的。

相关代码如下:

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

typedef struct
{
int a;
int b;
} Structure;

void Tester(Structure **Data)
{
Structure Input; size_t Number = 0;

*Data = NULL;

FILE *File = fopen("file.txt", "r");

while(2 == fscanf(File, "%d %d", &Input.a, &Input.b))
{
printf("Before: %d\n",Number);

Number++;

Structure *NewInput = realloc(*Data, Number * sizeof(Structure));

*Data = NewInput;

printf("After: %d\n",Number);

*Data[Number - 1] = Input;
}

fclose(File);
}

int main()
{
Structure *TestData;

Tester(&TestData);

printf("%d %d", TestData[0].a, TestData[0].b);

return 0;
}

当程序运行时,我使用的文本文件仅包含“1 2”,而当程序运行失败时,则包含“1 2 3 4”。错误发生在以下行:

        *Data[Number - 1] = Input;

所以我感觉第一次循环后 realloc 无法正常工作。任何和所有的帮助或建议将不胜感激!

最佳答案

由于运算符优先级

*Data[Number - 1] = Input;

相当于

*(Data[Number - 1]) = Input;

这将 Data 视为指针数组,而实际上它是指向另一个指向 Structure 数组的指针的单个指针。然后,它使用该数组的第 N 个元素(实际上并不存在)作为将 Input 复制到的位置。当 Number > 0 时它会失败,因为这些其他指针都没有被初始化(因为那里没有实际的数组)。

正确的语法是:

(*Data)[Number - 1] = Input;

这会取消引用Data以获取您可以分配给的Structure元素数组。

关于c - 从文件读取数据以重新分配动态结构数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36191269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com