双指针在C语言中的使用

双指针在C语言中的使用,c,C,有没有可能*ptr_B仍然等于NULL 我运行了一个自动检查工具,它总是在这里给出警告,说这是一个在*ptr_B->item=8行中的远期空风险 让我们分析一下代码: 结构单元**ptr_B; //ptr_B的高级1堆栈插槽,ptr_B值未初始化 结构buf**ptr_A=ptr_B; //为ptr_A提前1个堆栈插槽,通过未初始化的ptr_B值设置ptr_A *ptr_B=NULL; //取消引用未初始化的ptr_B ptr_B并将该内存块设置为空 *ptr_A=malloc; //取消引用未

有没有可能*ptr_B仍然等于NULL


我运行了一个自动检查工具,它总是在这里给出警告,说这是一个在*ptr_B->item=8行中的远期空风险

让我们分析一下代码:

结构单元**ptr_B; //ptr_B的高级1堆栈插槽,ptr_B值未初始化 结构buf**ptr_A=ptr_B; //为ptr_A提前1个堆栈插槽,通过未初始化的ptr_B值设置ptr_A *ptr_B=NULL; //取消引用未初始化的ptr_B ptr_B并将该内存块设置为空 *ptr_A=malloc; //取消引用未初始化的ptr_A ptr_A并将该内存块设置为malloc *ptr_B->项目=8; //取消引用未初始化的ptr_B ptr_B,*ptr_B未初始化并将其用作结构buf 正确代码:

结构单元**ptr_B; 结构单元**ptr_A; //为`ptr_a`和`ptr_B`分配一个`struct buf*`指针指向 结构buf**temp_ptr1=mallocsizeofstruct buf*; ptr_A=温度ptr1; ptr_B=温度ptr1; //将共享指针设置为NULL *ptr_B=NULL; //马洛克 结构buf*temp_ptr2=mallocsizeofstruct buf*; *ptr_A=温度ptr2; //从'ptr_B'设置值` *ptr_B->项目=8; //清理 免费*ptr_B; 自由贸易区;
这里有太多错误的东西,很难决定从哪里开始…几乎这段代码中的每一行都有一些未定义的行为欢迎这么做。在发帖之前,请花一点时间将所有相关信息填入问题中。对显示的代码进行重大更改可能会使所有现有注释和答案无效。请不要让你的问题成为移动的目标。为了确保您发布了正确的代码,请至少制作一个完整的可验证示例,如果它编译并显示了您的问题,您可以确保不需要反复更改问题。
void main() {
   struct buf *head = NULL;
   foo(&head);
}

void foo(struct buf **ptr_B) {
   struct buf **ptr_A = ptr_B;
   *ptr_B = NULL;
   *ptr_A = malloc(sizeof(struct buff));
   //here checked *ptr_A != NULL, so malloc is done successfully
   if (*ptr_A == NULL) {
      return;
   }
   *ptr_B->item = 8; 
}