【问题标题】:Struct pointer becomes NULL ? (C)结构指针变为 NULL ? (C)
【发布时间】:2013-11-07 12:57:23
【问题描述】:

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

起初我只是初始化“数据库”,分配它并将其值设置为 NULL。 在切换功能之前,我所拥有的正是我所期望的: Database 是指向 Ticket 类型结构的指针,next,prev,info 是指向 NULL 的指针。

在 Visual 中使用变量 watch 我注意到一旦我进入 switch 函数,数据库本身就变成了一个 NULL 指针,我不知道为什么。

New_node 是一个“TTransaction”类型结构,包含 2 个字符、2 个整数和 1 个 ENUM(操作)。

帮助:-(

【问题讨论】:

  • 在编译时,它不会在if 中报错Database 的重新声明错误吗?
  • 没有编译错误,只是运行代码时出现错误:-)
  • @@Danielbm 看看这个output
  • 好的,第二个声明在if语句的块范围内。

标签: c pointers struct null


【解决方案1】:

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

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

作者:

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

【讨论】:

  • 请不要转换 malloc() 的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2021-05-03
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
相关资源
最近更新 更多