簡體   English   中英

結構指針變為NULL? (C)

[英]Struct pointer becomes NULL ? (C)

我是C語言的新手,正在編寫一個對鏈接列表執行操作的代碼。 在添加代碼之前,以下是一些其他信息:

typedef struct Ticket Ticket;
    struct Ticket 
    {
        TTransaction *INFO;
        Ticket* next;
        Ticket* prev;
};

和我有問題的代碼:

void HANDLER1(TTransaction* New_node)
{
    Ticket * Database;
    if(!DB_Manager_Initialize)
    {
        Ticket * Database =(Ticket*)malloc(sizeof(Ticket));
        if(!Database)
        {
            OutputMgr_ReportTransaction(AXN_FAILURE,NULL);
            IM_END_OF_INPUT1(Database);
            exit(EXIT_FAILURE);
        }
        Database->next=NULL;
        Database->prev=NULL;
        Database->INFO=NULL;
        DB_Manager_Initialize=1;
    }
    switch(New_node->Operation)
    {
        case(IM_CREATE):
                IM_CREATE1(New_node,Database);
        case(IM_UPDATE):
                IM_UPDATE1(New_node,Database);
        case(IM_RETRIEVE):
                IM_RETRIEVE1(New_node,Database);
        case(IM_DELETE):
                IM_DELETE1(New_node,Database);
        case(IM_END_OF_INPUT):
                IM_END_OF_INPUT1(Database);
    }
}

起初,我只是初始化“數據庫”,對其進行malloc並將其值設置為NULL。 在切換功能之前,我所擁有的正是我所期望的:數據庫是指向Ticket類型結構的指針,而next,prev,info是指向NULL的指針。

在Visual中使用變量watch時,我注意到一旦輸入switch函數,數據庫本身就會變成NULL指針,我也不知道為什么。

New_node是一個“ TTransaction”類型的結構,包含2個字符,2個整數和1個ENUM(操作)。

救命 :-(

這是因為第一個數據庫被第二個數據庫遮蓋了。 更換:

Ticket * Database;
if(!DB_Manager_Initialize)
{
    Ticket * Database =(Ticket*)malloc(sizeof(Ticket));

通過:

Ticket *Database;
if(!DB_Manager_Initialize)
{
    Database = malloc(sizeof(Ticket));

暫無
暫無

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

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