将值放入结构数组中?

时间:2016-10-26 06:47:22

标签: c arrays struct

我无法将值放入我的结构数组中。使用单个结构它可以正常工作,但是只要我创建它们的数组,我就会收到“分段错误(核心转储)”错误。我通过调试器运行此代码,并且它表示在readFile fseek(fp,0L,SEEK_END)处导致了段错误。如果我删除与任何类型的内存分配有关的变量,则错误只会转移到该行中的下一个变量。

我很确定这与我如何将值放入结构数组中有关。

我用来将我需要的值放入struct数组的方法。

我意识到这段代码非常粗糙,我只是想在清理之前找到一个正常工作的模型。

2 个答案:

答案 0 :(得分:0)

如果错误位于fseek(fp,0L,SEEK_END);,您可能无法打开文件或打开文件时发生错误。

您是否检查了fp=fopen(...);的回复是不是NULL

您尚未发布最低可验证完整示例(MVCE),因此很难提供太多帮助。

https://stackoverflow.com/help/mcve

答案 1 :(得分:0)

struct parseData {
    char rules[1000][1000];
    char depend[1000][1000];
    char commands[1000][1000];
};

struct parseData data[5000];
对于这3个二维数组,

parseData需要3MB,因此data需要15GB的内存。这高于堆栈限制(通常大约10MB或100MB,具体取决于编译器)。您的代码建议可以按如下方式减少数组:

struct parseData 
{
    char rules[1000][50];
    char depend[1000][50];
};
...
struct parseData data[1000];

data仍然需要100MB的内存,这可能仍然超过了堆栈限制。因此,您应该在堆上声明data

struct parseData data[1000];
int main()
{
    ...
}

您还可以编写一个小型测试程序来使用realloc,这样可以在运行时增加内存量,因此您不需要大量的缓冲区。