gpt4 book ai didi

c - 指针赋值被忽略

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:53 25 4
gpt4 key购买 nike

当发生奇怪的事件时,我正在使用 Eclipse 编写 C 应用程序。

我有一个函数,我将一个指针传递给该函数,然后在函数内部,我为该指针分配了其他相同类型的指针,像这样的简单分配

pointer = otherPointer;

然后,奇迹般地,我的分配被程序完全忽略了。我已经使用 gdb 进行了改进,我看​​到程序通过了这一行并且指令被忽略了。

有人知道这个超自然事件的原因吗?

在程序中有相似的函数,具有相似的行为,并且分配正确。

这里是有问题的函数:

void uah_pcb_extract_queue_head (struct UAH_PCB * pPCB, struct UAH_PCB_Queue * pQueue)
{
if (pQueue->head->next != NULL)
{
pPCB = pQueue->head;
pQueue->head = pQueue->head->next;
}
else if (pQueue->head != NULL)
{
pPCB = pQueue->head;//this allocation
pQueue->head = NULL;//in this line the value has not changed
pQueue->tail = NULL;
}
else
{
pPCB = NULL;
}
}

最佳答案

你甚至没有看到 gdb 中的变化的原因是你的编译器可能已经优化了你函数的赋值,因为 pPCB 没有在其中再次使用,也没有返回。

如果你想让改变影响你函数之外的世界,你需要传入一个指针,然后改变它指向的值:

void uah_pcb_extract_queue_head (struct UAH_PCB ** pPCB, struct UAH_PCB_Queue * pQueue){
/* code... */
*pPCB = pQueue->head;
/* more code... */
}

或者,您可以返回地址并避免处理指向指针的指针:

 struct UAH_PCB * uah_pcb_extract_queue_head (struct UAH_PCB_Queue * pQueue){
/* code... */
struct UAH_PCB * pPCB = pQueue->head;
/* more code... */
return pPCB;
}

关于c - 指针赋值被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15710806/

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