Я довольно новичок в C и не могу найти ошибку, которую я получаю при отладке с помощью Valgrind. Вот ошибка, которую я получаю.
==1987== Invalid write of size 4
==1987== at 0x108C17: init_TSEQ (sequence.c:51)
==1987== by 0x1089A8: main (main1.c:14)
==1987== Address 0x51e5490 is 0 bytes after a block of size 880 alloc'd
==1987== at 0x4C2BBEF: malloc (vg_replace_malloc.c:299)
==1987== by 0x108B7E: init_TSEQ (sequence.c:38)
==1987== by 0x1089A8: main (main1.c:14)
Видимо, проблема заключается в этой функции.
SEQUENCE *init_TSEQ(int nseq)
{
DIR *D=opendir("sequences");
struct dirent *entry;
SEQUENCE *TSEQ=malloc(sizeof(SEQUENCE)*nseq);
FILE *F;
chdir("sequences");
for(int i=0; (entry=readdir(D))!=NULL; i++)
{
if(entry->d_type==DT_REG)
{
char seq[MAXSIZE];
F=fopen(entry->d_name, "r");
fscanf(F, "%s", seq);
TSEQ[i].lenght=strlen(seq); // This is the line where the error comes from (l.51 in the code)
for (int j=0; j<TSEQ[i].lenght; j++)
{
fscanf(F, "%c", seq);
TSEQ[i].c[j]=seq[j];
}
fclose(F);
}
}
closedir(D);
return TSEQ;
}
А вот структура SEQUENCE, которую я использую:
struct sequence
{
int lenght;
char c[MAXSIZE]; // MAXSIZE equals to 40
};
typedef struct sequence SEQUENCE;
Как вы можете видеть в функции, я выделил память для поля TSEQ.lenght в этой строке:
SEQUENCE *TSEQ=malloc(sizeof(SEQUENCE)*nseq);
Так, где мне не хватало выделения памяти?