簡體   English   中英

訪問沖突讀取位置(C中的鏈接列表)

[英]Access violation reading location (Linked lists in C)

我收到錯誤消息“訪問沖突讀取位置0xFEEEFEF2”。 在Microsoft Visual Studio中的while (tmp->next)中。 我不知道該如何解決。 我讀過類似的文章,但它們並不能解決我的問題。 我將不勝感激。 先感謝您。

#include <stdio.h>
#include <string.h>

typedef struct element {
    char ch;
    struct element *next;
} element;

void WriteAll(element *head)
{
    element *temp = head;
    printf("Lista:\n");
    while (temp)
    {
        printf("%c\n", temp->ch);
        temp = temp->next;
    }
    printf("\n");
}

int AddToBeginning(element **head, char value)
{
    element *n;
    if (!(n = (element*)malloc(sizeof(element)))) return 0;
    n->next = *head;
    n->ch = value;
    *head = n;
    return 1;
}

int DeleteChar(element **head, char value)
{
    element *tmp, *usun;
    if (!(*head)) return 0;
    while (*head && (*head)->ch==value)
    {
        usun = *head;
        *head = (*head)->next;
        free(usun);
    }
    if (!(*head)) return 1;
    tmp = *head;
    while (tmp->next)
    {
        if (tmp->next->ch == value)
        {
            element *k = tmp;
            tmp->next = tmp->next->next;
            free(k);
        }
        else {
        tmp = tmp->next;
        }
    }
    return 1;

}

int main()
{
    element *head = NULL;
    if (!AddToBeginning(&head, 'B')) printf("Error - AddToBeginning");
    if (!AddToBeginning(&head, 'A')) printf("Error - AddToBeginning");
    if (!AddToBeginning(&head, 'A')) printf("Error - AddToBeginning");
    if (!AddToBeginning(&head, 'B')) printf("Error - AddToBeginning");
    if (!AddToBeginning(&head, 'F')) printf("Error - AddToBeginning");
    if (!AddToBeginning(&head, 'A')) printf("Error - AddToBeginning");

    if (!DeleteChar(&head, 'A')) printf("Error - DeleteChar");
    WriteAll(head);
}

您嘗試在此處訪問free d tmp

if (tmp->next->ch == value)
{
    element *k = tmp; // <------------+
    tmp->next = tmp->next->next; //   |
    free(k); // free tmp -------------+
}
tmp = tmp->next;
/*     ^ tmp was freed */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM