【发布时间】:2020-12-08 23:25:00
【问题描述】:
为什么当我必须声明一个指向节点(头)的指针时,我还必须为它分配malloc 或calloc 的内存?我看到生成列表(此处未导入)的代码也可以正常工作,无需为其分配内存,只需声明node *head。
typedef struct str_node{
int data;
struct str_node *next;
}node;
int main(){
node *head;
head = (node*) malloc(sizeof(node));
head = NULL;
为什么当我像上面那样分配内存时我必须写(node*)?既然我是在头上做的,它不是已经分配给一个结构节点了吗?那行代码到底是什么意思?此外,当我写head = NULL时,我是把指针头的地址设置为NULL还是什么?
【问题讨论】:
-
你不必写
(node*),这里很多人强烈建议你不要写。 (它在 C++ 中是必需的,但这是一种不同的语言,在 C++ 中你不应该使用malloc。) -
(node*)只是将结果转换为指向node的指针,head = NULL清除列表(将根设置为NULL并且不应该在这里因为必须使用free释放malloc返回值)。 -
好的,但我不会将结果转换为指向已经声明“head = ....”的节点的指针@רועיאבידן
-
是的,这就是为什么@rici 正确地说,你不必这样做(在 C 中,而不是 C++ 中)。
标签: c memory-leaks linked-list dynamic-memory-allocation