Я пытаюсь прочитать строки из файла, по одному символу за раз.
Пример ввода:
5 2
2
1 3
2 4 5
3
Предположим, я пытаюсь прочитать первую строку, затем я сначала читая '5', затем пробел ('') и затем '2', а затем пытаясь сохранить два числа в массиве, который я объявил, используя realloc
, потому что я не знаю, сколько чисел будет быть там в строке, прежде чем читать строку. Я знаю только количество строк, которые будут присутствовать в файле numNodes
.
. Я пытаюсь сохранить числа в двумерном массиве, где каждая строка будет иметь разную длину rnet. Поскольку я не знаю заранее длины каждой строки, я выделяю память, используя realloc
после прочтения каждого числа.
Поскольку числа могут быть более чем однозначными, я храню символы в num
массив символов, и когда я сталкиваюсь с пробелом ('') или символом новой строки ('\ n'), я конвертирую его в число, используя atoi
, и сохраняю его в подходящей строке после выделения памяти для него, используя * 1015. *.
вот мой код
FILE *fp;
fp = fopen("input.txt","r");
char ch;
int numNodes = 5, i = 0;
int **adjList = (int **)malloc(numNodes*sizeof(int *));
int len = 0,j,k=0;
char num[4];
for(i=0;i<numNodes;i++)
{
adjList[i] = NULL;
printf("Node %d -> ",i+1);
do
{
//read =
fscanf(fp,"%c",&ch);
if(ch!=' ' && ch!='\n')
{
num[k]=ch;
k++;
}
else
{
k = 0;
len++;
adjList[i] = (int *)realloc(adjList[i],sizeof(int)*len);
adjList[i][len-1] = atoi(num);
for(k=0;k<4;k++)
num[k]='0';
}
}
while(ch!='\n');
for(j=0;j<len;j++)
printf("%d ",adjList[i][j]);
printf("\n");
len = 0;
}
Однако я получаю Segmentation Fault (core dumped)
в последней строке, то есть после того, как 2 4 5
напечатано.
Любой Приветствуется помощь в том, почему эта ошибка возникает в последней строке?
РЕДАКТИРОВАТЬ :
Изменено ch
на &ch
в fscanf
строке
Изменено ch[0]
на ch
(if
оператор)
Добавлено adjlist[i] = NULL
перед do...while
л oop