检查结构的成员是否为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在我的情况下,将其设置为不是一个选项.
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 自动归零初始化分配的内存| 归档时间: |
|
| 查看次数: |
5003 次 |
| 最近记录: |