我现在正在学习 C,在一些代码示例中,我看到在为指针分配一些内存后,我们必须检查指针是否为 NULL。例如:
CVector *vector = malloc(sizeof(struct CVectorImplementation));
assert(vector != NULL);
另一个例子:
vector->elements = realloc(vector->elements, vector->elemsz * vector->vec_capacity);
assert(vector->elements != NULL);
不过,我想既然指针已经被分配了,那么它的值就是分配内存的地址,所以它总是必要的吗?为什么?
最佳答案
如果您已重新分配原始指针以响应 realloc
,则为响应失败而做任何有用的事情都为时已晚。当 realloc
失败时,它返回 NULL
,但它不会释放
原始指针。因此,即使您对分配失败(不常见)有一些合理的响应,您也已经泄漏了您尝试realloc
的内存。
您的主要问题的答案主要是“允许 NULL
指针取消引用发生是个坏主意,因为它是漏洞的来源”;通常漏洞会出现在内核代码中(其中 NULL
与其他任何地方一样是有效的地址),但即使它不可利用,也意味着程序会出现段错误而不是以有用的方式报告错误.
关于c - 我们是否总是需要在 malloc/realloc 之后检查指针是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33227879/