我目前正在尝试从文件中读取多个浮点数。当我只使用一个变量时,它工作正常,但保存到多个浮点数时会出现问题:
float r_testdata[3276334];
float i_testdata[3276334];
int e = 1;
FILE *fpI_i = fopen("/home/users/Documents/document.dat","r");
for(int i = 0; i < 3276334;i++) {
e = fscanf(fpI_i,"%f %f",&r_testdata[i],&i_testdata[i]);
if(e != 1) {
fprintf(stderr,"Error reading file\n");
}
}
fclose(fpI_i);
当fscans以2读取时,会发生段错误。这似乎是fscanf的格式化问题,但我没有看到问题是什么。我查看了类似问题的帖子,但尚未解决。
答案 0 :(得分:2)
由于巨大的数组,您可能会出现堆栈溢出。如果它们位于如下函数中:
void foo(void)
{
float r_testdata[3276334];
float i_testdata[3276334];
堆栈太小而无法容纳它们,从而导致内存损坏和段错误。
你可以像以下一样使它们全球化:
float r_testdata[3276334]; // Declared outside the function
float i_testdata[3276334];
void foo(void)
{
或更好地使用malloc
使用动态内存分配。像:
float *r_testdata = malloc(3276334 * sizeof(float));
当您完成r_testdata
时,请记得致电free(r_testdata);
如@BLUEPIXY所述:
这一行错了:
if(e != 1) {
您正在尝试读取两个值,因此必须使用:
if(e != 2) {