簡體   English   中英

用C語言列出。 訪問沖突

[英]Lists in C language. Access violation

解釋起來有點棘手,但我還是會嘗試的。 我正在嘗試創建一個程序,該程序將得到一個以0結尾的列表,中間也有0.該程序將檢查誰是每個零之間的最小值(例如:對於列表6 -> 3 -> 15 -> 0 -> 1 ->2 ->0 ,最小值為3和1),將從列表中將其刪除,並將其插入到另一個列表中。

例如,如果list1為6 -> 3 -> 15 -> 0 -> 1 ->2 ->0 ,則在我運行程序后,list1將為6 -> 15 -> 0 -> 2 ->0 , list2將是3->1

運行代碼時,出現訪問沖突錯誤。 這是我的代碼:

list* essay(list* anchor1)
{
    list* prev_to_min,*runner,*prev_to_runner,*result,*result_temp;
    int min;
    prev_to_min=prev_to_runner=anchor1;
    result=allocate_list();
    result_temp=result;
    runner=prev_to_runner->address_to_next;
    min=runner->number;
    while(runner!=NULL)
    {
        while(runner->number!=0)
        {
            if(min>=runner->number)
            {
                min=runner->number;
                prev_to_min=prev_to_runner;
            }
            prev_to_runner=runner;
            runner=runner->address_to_next;
        }
        remove_item(prev_to_min);
        result_temp=insert_item(result_temp,min);
        prev_to_runner=runner;
        runner=runner->address_to_next;
        if(runner!=NULL)
            min=runner->number;
    }
    return result;
}

一個小小的解釋,因為周圍有很多變量:result是指向list2的錨點(最小值列表)的指針,result_temp是指向list2的當前最后一項的指針,Runner是im用來迭代list1的指針,則prev_to_runner是指向列表中的跑步者之前的項目,而prev_to_min是指向list1中的最小值之前的項目。 例如6 -> 3 -> 15 -> 0 ,最小值是3,所以prev_to_min是地址6。

我試圖用一張紙運行它,在腦海中運行該程序,然后得到所需的結果。 但是當我對其進行編譯並在計算機上運行它時,出現錯誤“更多list.exe中的0x5557700c(msvcr100d.dll)未處理的異常:0xC0000005:讀取位置0xfffffffc的訪問沖突。”

這是用於插入和刪除項目的代碼:

void remove_item(list* prev_position)
{
    list* deleted;
    deleted=prev_position->address_to_next;
    prev_position->address_to_next=deleted->address_to_next;
    free(*deleted);
}

list* insert_item(list* position,listdata x)
{
    list* temp=(list*)malloc(sizeof(list));
    temp->number=x;
    temp->address_to_next=position->address_to_next;
    position->address_to_next=temp;
    return temp;
}

Access violation reading location 0xfffffffc. 這是一個很好的線索,您有一個NULL指針,您將其備份了32位整數的大小,然后嘗試讀取它。

如果您在調試器中運行,它將告訴您在哪里。

暫無
暫無

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

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