为何要将malloc分配内存的buffer数组赋值给新指针d?
关于malloc指针赋值与有效性检查的疑问解答
我在学习malloc相关内容时看到如下代码片段,对其中将已通过malloc分配内存的数组buffer赋值给新指针d的操作感到困惑。为何不能直接在if语句中检查buffer是否有效?
#include <stdlib.h> #include <stdio.h> int *ft_range(int min, int max) { int range; int index; int *buffer; int *d; if (min >= max) return (0); range = max - min; d = (buffer = malloc(range * sizeof(int))); // 疑问指向的操作 if (!d) return (0); index = 0; while (index < range) { buffer[index] = min + index; index++; } return (buffer); }
解答
完全可以直接检查buffer是否有效,代码里用d的操作纯属冗余,没有任何必要。
拆解这段代码的赋值逻辑:
buffer = malloc(...)是将malloc返回的内存地址赋值给buffer- 整个赋值表达式的结果就是malloc返回的地址,再把这个结果赋值给
d - 此时
d和buffer指向同一块内存,检查!d和检查!buffer的效果完全一致
这种写法可能是作者的个人习惯,或是编写时的多余操作——它既没有性能优势,也不优化逻辑,反而多定义了一个无用变量,增加了代码复杂度。
如果要简化代码,完全可以改成更清晰的写法:
buffer = malloc(range * sizeof(int)); if (!buffer) return (0);
内容的提问来源于stack exchange,提问作者Sevban Bayır
相关产品推荐
相关产品推荐

