如何在C中检查struct的成员是否为NULL?

ant*_*ngl 0 c

检查结构的成员是否为null时遇到问题.例如:

typedef struct {
    int value;
} A;

int main() {
   A *foo = malloc(sizeof(A));
   foo->value++; // obviously, null pointer error
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试通过以下方式检查值是否为NULL:

if (foo->value != NULL) {
    foo->value++;
}
Run Code Online (Sandbox Code Playgroud)

但是发生了错误:指针和整数之间的比较.

我该怎么办?请注意,0在我的情况下,将其设置为不是一个选项.

cni*_*tar 6

你可能意味着

if (foo)
    foo->value++;
Run Code Online (Sandbox Code Playgroud)

你的评论"显然是空指针错误"对我来说并不那么明显.


Pra*_*ian 6

foo->value++; // obviously, null pointer error
Run Code Online (Sandbox Code Playgroud)

对我来说不是那么明显为什么这是一个错误.value是一个int,而不是一个int *,所以它怎么可能是一个NULL指针?

我想你打算执行以下检查

A *foo = malloc(sizeof(A));
if( foo != NULL ) {
  foo->value++; // increment value
} else {
  // allocation failed, do something about it
}
Run Code Online (Sandbox Code Playgroud)

当你为malloc一个结构分配足够的内存来包含该结构的所有成员时; 你没有为每个成员分配内存.

请注意,malloc调用后结构本身的内容未初始化.要将成员设置为确定性状态,您可以执行以下任一操作:

  • foo->value = 0; 同样初始化所有其他成员
  • memset( foo, 0, sizeof(*foo) ); 这会将结构中的所有位设置为零
  • A *foo = calloc( 1, sizeof(A) ); calloc 自动归零初始化分配的内存