Считывание ошибок сегментации в большом массиве данных, хранящемся в CSV - PullRequest
0 голосов
/ 19 апреля 2019

Я завершаю задачу по домашнему заданию по программированию на CUDA и пытаюсь прочитать большой набор данных. Я работаю удаленно через SSH на машине через мой университет.

Я имею дело с тремя столбцами данных и 2 ^ 25 строками в CSV-файле. Каждый раз, когда я запускаю свой код, я получаю чтение ошибки сегментации в данных около 900-й итерации моего цикла while, который сканирует CSV.

Я провел расширенный поиск по переполнению стека и попробовал несколько различных способов чтения данных.

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.

Фактические результаты состоят в том, что каждый раз на 900-й итерации цикла while происходит ошибка сегментации.

1 Ответ

2 голосов
/ 19 апреля 2019

2^25 - это не «2 к степени 25». Это 2 XOR 25.

Я предлагаю вам использовать значение 33554432.

Редактировать: (спасибо @bruno)

33554432 легче читать как 1 << 25.

...