我应该明确地施放malloc()的返回值吗?
这个问题在这里已经有了答案:
C中的void指针可以分配给任何指针而不需要显式强制转换。
如果你喜欢“不要重复自己”的思维方式,那么应该有吸引力,你不需要在malloc()
调用中重复变量声明中的类型名称。 因为,正如人们已经指出的那样,你不需要:除了函数指针之外,指针可以毫无损失地转换成void *
和void *
。
另外,在该说明中,您不需要重复使用sizeof
。 你的第二个例子,当分配一个结构时,可以这样写:
struct node *temp;
temp = malloc(sizeof *temp);
在我不那么谦虚的意见中是最好的方法。
避免重复自己,可以减少你写的东西的数量,从而减少任何这些错误的风险。
请注意sizeof
参数中的星号,这意味着“该指针指向的对象的大小”,当然这与“ struct node
的大小”相同,但不重复类型名称。 这是因为sizeof
计算(在编译时!)作为其参数的表达式的大小。 对于这种情况。 就像sizeof 3
计算int
类型的表达式的大小一样, sizeof *temp
计算struct node
的大小。
当然,你确实重复了一些东西,比如变量名本身,但这通常是一个更简单的表达式,更容易正确使用,编译器也可以更容易地发现错误。
C隐式地从和转换为void*
,所以这个转换将自动完成。 在C ++中,只有转换为void*
才会隐式完成,而对于另一个方向则需要显式强制转换。
上一篇: Should I explicitly cast malloc()'s return value?
下一篇: How does the global variable declaration solve the stack overflow in C?