我是C编程的初学者,并尝试使用struct来存储相关变量,然后在主程序中使用它们。但是,当我在不使用struct的情况下运行相同的程序时,它运行正常。
代码如下所示,除了分段错误外,没有显示任何编译错误但没有输出。
#include<stdio.h>
struct test
{
char string1[10000];
char string2[10000];
char string3[10000];
char string4[10000];
}parts;
int main()
{
FILE *int_file;
struct test parts[100000];
int_file=fopen("intact_test.txt", "r");
if(int_file == NULL)
{
perror("Error while opening the file.\n");
}
else
{
while(fscanf(int_file,"%[^\t]\t%[^\t]\t%[^\t]\t%[^\n]",parts->string1,parts->string2,parts->string3,parts->string4) == 4)
{
printf ("%s\n",parts->string3);
}
}
fclose(int_file);
return 0;
}
输入文件“intact_test.txt”包含以下行: AAAA \ tBBBB \ tCCCC \ tDDDD \ n
答案 0 :(得分:2)
struct test
的每个实例都是40k所以
struct test parts[100000];
尝试在堆栈上分配4GB。这将失败,导致您的seg错误。
您应该尝试减少每个struct test
实例的大小,减少parts
个元素并将其移出堆栈。通过给它静态存储持续时间
static struct test parts[SMALLER_VALUE];
答案 1 :(得分:0)
单个结构占用40,000个字节,你有100,000个字节。这达到了4,000,000,000字节,或大约4GB。我并不感到惊讶你是段错误
请重新考虑你在做什么。你是否正在认真阅读4个字符串,每个字符串10,000个字符?