gpt4 book ai didi

c - 结构指针变为 NULL ? (C)

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:24 24 4
gpt4 key购买 nike

我是 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(操作)。

帮助:-(

最佳答案

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

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

通过:

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

关于c - 结构指针变为 NULL ? (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19836605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com