簡體   English   中英

使用fscanf時出現段錯誤

[英]Segfault when using fscanf

我目前正在嘗試從文件讀取多個浮點數。 當我只使用一個變量時,它可以正常工作,但是保存到多個浮點數時會出現問題:

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的格式問題,但我無法看到問題所在。 我看過類似問題的帖子,但尚未修復。

似乎由於數組大而導致堆棧溢出。 如果它們在像這樣的函數中:

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) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM