Проблема здесь:
memset(&fPD->dir,0,strlen(tmpStr)+1);
Приведенная выше строка должна гласить:
memset(fPD->dir,0,strlen(tmpStr)+1);
В противном случае вы не только обнуляете указатель fPD->dir
, вы также повреждаете память сразу после нее. Как только вы обнулите указатель, последующие strcpy()
в указанных ошибках памяти.
Фактически, вся эта строка memset()
выглядит избыточной, поскольку сразу за ней следует strcpy()
.