CSV存储大数据阵列的分段故障读取

问题描述 投票:0回答:1

我正在完成一个CUDA编程作业问题,并努力阅读大数据集。我正在通过我的大学在一台机器上通过SSH远程运行。

我正在处理CSV文件中的三列数据和2 ^ 25行。每次运行我的代码时,我都会在扫描CSV的while循环的第900次迭代中读取数据。

我已经对堆栈溢出进行了大量的搜索,并尝试了几种不同的方法来读取数据。

static double inputs[2^25]; 
static double outputs[2^25]; 
static double txval[2^25]; 

FILE *input = fopen("coins.csv", "r");
int j = -99; 
char buffer[1024];
char *field; 
unsigned long k = 0; 

if(input == NULL){
    printf("Unable to open file\n"); 
    return 1; 
}

while(fgets(buffer, 1024, input) && k < 2^25){

    // skip the first row with column titles 
    if(j == -99){
        j = 0; 
    }

    else{
    field = strtok(buffer, ","); 
    inputs[k] = atof(field); 

    field = strtok(NULL, ","); 
    outputs[k] = atof(field); 

    field = strtok(NULL, ","); 
    txval[k] = atof(field); 

    k = k + 1; 


    }
}
fclose(input); 

预期的结果是整个文件将读入,因为每次while循环运行时缓冲区都会被覆盖。

实际结果是每次在while循环的第900次迭代时发生分段错误。

c csv fgets
1个回答
2
投票

2^25不是“2强25”。它是2 XOR 25。

我建议你使用值33554432

编辑:(感谢@bruno)

335544321 << 25更容易阅读。

© www.soinside.com 2019 - 2024. All rights reserved.