0

ここで少し問題があります。

個別にリンクされたリストのものをプログラムする必要があり、それ以来問題はありませんでした。リンクされたリストの著者名の関数呼び出しの後に指定された部分文字列の出現による削除に固執しました。

プログラムの抜粋:

void list_delete_element(kniha_t* inode)
{
    kniha_t *actualnode = inode;
    kniha_t *prevnode = NULL;
    kniha_t *tempnode = NULL;

    uchar_t needle[100];
    uchar_t haystack[100];
    ushort_t occur = 0;

    scanf("%s", &needle);
    lower_string(needle);
    while(actualnode != NULL)
    {
        copy_string(haystack, actualnode->autori);
        lower_string(haystack);
        if(search_string(haystack, needle))
        {
            occur++;
            if ( NULL != prevnode)
            {
                prevnode->next = actualnode->next;
            }
            else
            {
                inode = actualnode->next;
            }
            tempnode = actualnode;
            actualnode = actualnode->next;
            free(tempnode);
            tempnode = NULL;
        }
        else
        {
            prevnode = actualnode;
            actualnode = actualnode->next;
        }
    }
    printf("Deleted sa %hu nodes\n", occur);
}


---:
http://pastebin.com/NPvEr3y6

問題は、それが機能することです ( :D )...すべての出現を一掃するまで。

例:
pra と入力すると、「pra」を含むすべてのノードを削除する必要があります。それは魅力のように機能します...しかし、「p」だけを入力すると、すべてのXオカレンスが解放されたことがわかりますが、リスト全体を再度印刷できるため、バッファのどこかに残ります!


アドバイスをいただけると大変助かります。

4

2 に答える 2

1

この文:

 tempnode = NULL;

tempnode代入と即時解放以外には何もしないので、実際には何もしません。

于 2013-05-06T10:06:02.413 に答える