【发布时间】:2011-02-27 08:42:39
【问题描述】:
我如何编写一个 if 语句来告诉程序是否分配了指针?
错误的例子
if (*badpdr[0]==0);
【问题讨论】:
-
注意:在尝试解决此问题的过程中,您可能会发现一个名为
IsBadPtr的函数。 不要使用它!
标签: c pointers variable-assignment if-statement
我如何编写一个 if 语句来告诉程序是否分配了指针?
错误的例子
if (*badpdr[0]==0);
【问题讨论】:
IsBadPtr 的函数。 不要使用它!
标签: c pointers variable-assignment if-statement
你的意思是if (badptr==NULL)?
请注意,在定义指针或“取消分配”时(例如,删除它引用的对象),您必须首先将指针设置为 NULL。否则,它将包含垃圾,并且此测试将失败,因为该值不会是 0。
您也可以与 0 而不是 NULL 进行比较,SO 上已经有足够的参数,这是正确的形式,所以我不会重复它们。
【讨论】:
char *ptr=NULL;
初始化指向NULL的指针;然后稍后你可以检查它是否是NULL,看看它是否有效,然后再尝试尊重它。
【讨论】:
在C++ 中,当未分配int 变量时,它们的初始值为2686392!
【讨论】:
您可以为SIGSEGV 安装信号处理程序,然后尝试取消引用指针 - 如果您发现自己在信号处理程序中,则指针未分配(或指向无效的内存地址,这基本上是同一件事)
但是,在某些情况下,未分配的指针指向属于进程内存空间的有效地址 - 在这种情况下,不会引发 SIGSEGV。
【讨论】:
SIGSEGV,它是 POSIX,而不是 Microsoft。
您可以使用宏来完成这项工作:
#define NP_CHECK(ptr) \
{ \
if (ptr == NULL) { \
fprintf(stderr, "%s:%d NULL POINTER: %s\n", \
__FILE__, __LINE__, #ptr); \
exit(-1); \
} \
} \
【讨论】: