我似乎无法摆脱额外的链接列表。我知道有很多方法可以做到这一点,但我只是想以一种简单的方式释放它,因为它是在我的循环中创建的额外的。这是代码:
current = first = malloc (sizeof (NODE));
while( fscanf( fin, "%s", current -> seq) != EOF) {
for (i = 0; i < 300; i++){
if (current->seq[i] == 'a')
current->seq[i] = 'A';
else if (current->seq[i] == 't')
current->seq[i] = 'T';
else if(current->seq[i] == 'g')
current->seq[i] = 'G';
else if(current->seq[i] == 'c')
current->seq[i] = 'C';
}
if ( (current -> next = malloc ( sizeof(NODE) ) ) == NULL){
fprintf(fout, "Out of memory\nCan't add more DNA sequences\n");
return EXIT_FAILURE;
}
current = current -> next;
}
答案 0 :(得分:1)
用
替换代码的最后部分prev= NULL;
current = first =...
...
} //end if
prev = current;
current = current->next;
} //end while
free(current)
if(prev !=NULL)
prev->next = Null;
答案 1 :(得分:0)
一种方法是永远不要创建额外的节点。从文件读取到临时变量,并且在您知道需要它之前不要创建下一个节点。
NODE* first;
NODE** ppCurrent = &first;
while( fscanf( fin, "%s", temp) != EOF)
{
if ((*ppCurrent = malloc(sizeof(NODE))) == NULL)
{
fprintf(fout, "Out of memory\nCan't add more DNA sequences\n");
return EXIT_FAILURE;
}
for (i = 0; i < 300; i++)
temp[i] = toupper(temp[i]);
(*ppCurrent)->seq = temp;
ppCurrent = &((*ppCurrent)->next);
}