在我意外使用的代码中
list* Head = malloc(sizeof(list*));
而不是正确的
list* Head = malloc(sizeof(list));
创建一个新的list
类型节点但以后工作得很好。
所以我的问题是为什么它能正常运作?
答案 0 :(得分:11)
这里的想法是,malloc()
不知道(类型/大小)或与要为其分配返回值的变量的关系。它接受输入参数,分配所请求大小的内存并返回指向内存块的指针,就是这样。因此,如果您要求错误的内存块大小,malloc()
没有什么可以阻止您这样做。一旦你使用返回的指针,你将是
现在,在任何一种情况下,您都可以看到正常工作。前者有点允许(虽然应该避免),但后者是严格禁止的。
建议:
要避免这些类型的错误,请使用格式
type * variable = malloc(sizeof *variable);
在这种情况下,你有两个好处,