Я пытаюсь прочитать последовательности из файла FASTA в созданную мной таблицу структур, каждая из которых содержит элемент массива символов с именем "seq". Мой код, кажется, работает хорошо для первого цикла, но когда я перераспределяю память для второй последовательности, указатель, кажется, указывает на значения мусора, а затем метод strcat () выдает мне ошибку.
Вот весь файл FASTA, из которого я пытаюсь прочитать:
>1
AAAAAAAAAAGWTSGTAAAAAAAAAAA
>2
LLLLLLLLLLGWTSGTLLLLLLLLLLL
>3
CCCCCCCCCCGWTSGTCCCCCCCCCCC
Вот код (извините, что некоторые имена переменных написаны на французском языке):
typedef struct _tgSeq { char *titre ; char *seq ; int lg ; } tgSeq ;
#define MAX_SEQ_LN 1000
tgSeq* readFasta(char *nomFile) {
char ligne[MAX_SEQ_LN];
tgSeq *lesSeq = NULL;
int nbSeq=-1;
FILE *pF = fopen(nomFile, "r");
while(fgets(ligne, MAX_SEQ_LN, pF) != NULL) {
if(ligne[0] == '>') {
/*create a new sequence*/
nbSeq++;
//reallocate memory to keep the new sequence in the *lesSeq table
lesSeq = realloc(lesSeq, (nbSeq)*sizeof(tgSeq));
//allocate memory for the title of the new sequence
lesSeq[nbSeq].titre = malloc((strlen(ligne)+1)*sizeof(char));
//lesSeq[nbSeq+1].titre becomes a pointer that points to the same memory as ligne
strcpy(lesSeq[nbSeq].titre, ligne);
//Now we create the new members of the sequence that we can fill with the correct information later
lesSeq[nbSeq].lg = 0;
lesSeq[nbSeq].seq = NULL;
} else {
/*fill the members of the sequence*/
//reallocate memory for the new sequence
lesSeq[nbSeq].seq = realloc(lesSeq[nbSeq].seq, (sizeof(char)*(lesSeq[nbSeq].lg+1+strlen(ligne))));
strcat(lesSeq[nbSeq].seq, ligne);
lesSeq[nbSeq].lg += strlen(ligne);
}
}
// Close the file
fclose(pF);
return lesSeq;
}
Для первой строки (AAAAAAAAAAGWTSGTAAAAAAAAAAA): lesSeq [nbSeq] .seq = realloc (lesSeq [nbSeq] .seq, (sizeof (char) * (lesSeq [nbSeq] .lg + 1 + str)) ; дает мне пустой символьный массив, на который я могу объединить, но для второй строки (LLLLLLLLLLGWTSGTLLLLLLLLLLL) тот же код дает мне мусорные символы, такие как "(???". Я предполагаю, что проблема заключается в том, что перераспределение указывает на какой-то вид мусорной памяти, но я не понимаю, почему она будет отличаться для первой и второй строк.
Любая помощь, которую вы можете оказать, будет принята с благодарностью! Спасибо!