Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结构指针变为空?(C)_C_Pointers_Struct_Null - Fatal编程技术网

结构指针变为空?(C)

结构指针变为空?(C),c,pointers,struct,null,C,Pointers,Struct,Null,我是C语言的新手,我正在编写一个代码,在链表上执行操作。 在我添加代码之前,这里有一些附加信息: typedef struct Ticket Ticket; struct Ticket { TTransaction *INFO; Ticket* next; Ticket* prev; }; 还有我的问题代码: void HANDLER1(TTransaction* New_node) { Ticket * Databas

我是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。 在切换功能之前,我所拥有的正是我所期望的: 数据库是指向票证类型结构的指针,next、prev、info是指向NULL的指针

在visualwatch中使用变量watch时,我注意到数据库本身在进入switch函数后变成了一个空指针,我不知道为什么

New_节点是一个TTransaction类型的结构,包含2个字符、2个整数和1个枚举操作


帮助:-

这是因为第一个数据库被第二个数据库隐藏。替换:

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


编译时请不要强制转换malloc的结果if语句中的数据库重新声明错误,不是吗?没有编译错误,只是运行代码时出现错误:-@@Danielbm看这个Ok,第二个声明在if语句的块作用域下。
Ticket *Database;
if(!DB_Manager_Initialize)
{
    Database = malloc(sizeof(Ticket));