结构指针变为NULL? (C)

时间:2013-11-07 12:57:24

标签: c pointers struct null

我是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);
    }
}

首先我只是初始化"数据库",对其进行mallocing并将其值设置为NULL。 在切换功能之前,我所拥有的正是我所期望的: 数据库是指向Ticket类型struct的指针,next,prev,info是指向NULL的指针。

在Visual i中使用变量监视器注意到,一旦我进入切换功能,数据库本身就变成了NULL指针,我不知道为什么。

New_node是" TTransaction"类型struct包含2个字符,2个整数和1个ENUM(操作)。

帮助: - (

1 个答案:

答案 0 :(得分:12)

这是因为第一个数据库被第二个数据库遮蔽了。替换:

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

人:

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