Входной файл для моей программы имеет первую строку, содержащую int (назовите ее N), которая будет означать, сколько будет следующих целых чисел (каждое целое число в новой строке). Затем он должен прочитать целые числа в num_array и распечатать их. Моя проблема в том, что num_array не выделяется должным образом, я думаю. Операторы отладки в коде будут печатать 8 как sizeof (num_array) независимо от того, что N.C проблема с динамически распределяющим массивом
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
int *num_array;
int main (int argc, char**argv){
int numThreads = (int) argv[1];
char *inputFile = argv[2];
int N = 0;
char line[20];
FILE *file = fopen(inputFile, "r");
int fileCounter = 0;
while(fgets(line, sizeof(line), file)) {
if (fileCounter==0){
N = atoi(line);
num_array = malloc(sizeof(int)*(N+1));
}
else{
num_array[fileCounter-1] = atoi(line);
}
fileCounter++;
}
fclose(file);
int i;
printf("%d", sizeof(num_array));
printf("\n");
printf("\n");
for(i = 0; i<sizeof(num_array); i++){
printf("%d\n", num_array[i]);
}
return 0;
}
Пример ввода файла:
9
10
9
3
212
56
99
4
5
6
напечатает:
8
10
9
3
212
56
99
4
5
Как вы можете видеть, последний элемент массива отсекается (не печатает 6) и кажется, что num_array не подбирается правильно (должно содержать N целых чисел, где N - это int в первой строке входного файла)
изменили его в целое numThreads = atoi (ARGV [1]) и по-прежнему получать тот же результат – GregH
@jeremy мой ответ не говорит, что он исправит вашу проблему, я стараюсь найти проблему, но вы должны публиковать образцы данных из своего файла и не использовать 'atoi()' это не очень полезно, потому что вы не можете выполните любую проверку ошибок. –
@jeremy nevermind Я просто нашел образец входного файла. –