我无法将值放入我的结构数组中。使用单个结构它可以正常工作,但是只要我创建它们的数组,我就会收到“分段错误(核心转储)”错误。我通过调试器运行此代码,并且它表示在readFile
fseek(fp,0L,SEEK_END)
处导致了段错误。如果我删除与任何类型的内存分配有关的变量,则错误只会转移到该行中的下一个变量。
我很确定这与我如何将值放入结构数组中有关。
我用来将我需要的值放入struct数组的方法。
我意识到这段代码非常粗糙,我只是想在清理之前找到一个正常工作的模型。
答案 0 :(得分:0)
如果错误位于fseek(fp,0L,SEEK_END);
,您可能无法打开文件或打开文件时发生错误。
您是否检查了fp=fopen(...);
的回复是不是NULL
?
您尚未发布最低可验证完整示例(MVCE),因此很难提供太多帮助。
答案 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
,这样可以在运行时增加内存量,因此您不需要大量的缓冲区。