我正在研究一个项目,并且我不断遇到这个错误,这将不允许我完成该项目。当我初始化一个指针以指向程序执行过程中将制作的对象时,我将其初始化为 NULL. 。然后,当我检查以查看设置的内容时,它返回的值 nil. 。怎么可能?我不相信C中存在零指针。

struct order_line *front = NULL;
...
printf("Head: %p\n", front);  // prints -> Head: (nil)
有帮助吗?

解决方案

%pprintf 格式化指针类型。这将区分无零件并打印 (nil) 因为它在指针的上下文中是一个特殊的价值。如果要输出零指针0,请将指针施放为整数并使用 %d 反而:

printf("Head: %d\n", (int) front);

原始答案可能仍然有用:

NULL 是一个宏定义为 0 或者 ((void *) 0), ,因此,如果您设置了一个指针 NULL 与设置完全相同 0. 。这适用于宣布无效指针的目的,因为地址0的内存永远不会分配给您的程序。

其他提示

当您打印指针时 printf("%p", somePtr), ,它印在 实施定义的方式, ,根据此报价 POSIX PRINTF规范 (在C99规范中也存在类似的措辞)。

该论点必须是通往空白的指针。指针的价值以实现依赖性方式转换为一系列可打印字符。

我想,这意味着指针是 NULL, ,它可能需要打印它,包括将其打印为 nil 或者 0x00000000 或者 0.

利用

printf("Head: %s, %d, %p\n", front, front, front);

打印 Head: (null), 0, (nil)

谢谢Packia

我假设NIL是您的调试器告诉您的。在大多数编译器中,null只是#Define ed y yany无论如何,因此名称并不那么重要。

正如其他人所说的那样,没有任何零指针的东西。

可能是您的内存分配失败,导致 0 被分配给指针。

如果您的问题是关于将指针值与NULL进行比较,则printf()打印的值无关紧要。你仍然可以做 if(ptr == null) 为了那个原因。

    ptr =(nil)和null =(nil)=> ptr = null :)

由于某些其他原因,您必须遇到的错误。

用INT施放结构指针后,它提供了预期条件。

printf("The address of the variable is---ps->p---After Deletion-- %p \n",ps->p);
printf("The address of the variable is---ps->p---After Deletion--  %d \n",(int)ps->p);
if((int)ps->p){
printf("Again in Free\n");
doFree((void **)&ps->p);
}

输出 :-

变量的地址为--- ps-> p ---删除后 - nil变量的地址为--- ps-> p ---删除后 - 0

它将评估为假条件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top