【发布时间】:2014-02-19 06:31:51
【问题描述】:
以下代码无法编译(代码是部分/修改过的代码,原因很明显)
typedef struct l_list{
int value;
struct l_list *next;
}list; // given
void delete(list **head, int value){ //given
...
free(current); // segmentation fault
...
}
int main() /// given for testcase
{
list listg[2];
// initialized 2 struct and link them with each other using next pointer one after another (think like arrayed linked list)
delete(&listg, 3);
}
error: cannot convert list (*)[2] {aka l_list (*)[2]} to list** {aka l_list**} for argument 1 to void delete(list**, int)
问题1:编译帮助。请指教!
问题2:如果我们必须像上面那样实现delete,在函数中如何释放数组列表中的指针? (如何消除分段错误?)
【问题讨论】:
-
对于 Q1:将
list listg[5];更改为list *listg;。 -
指向某事物的指针的指针不与指向某事物数组的指针相同。如果你稍微搜索一下,就会有很多重复。
-
@herohuyongtao 这是我编译的,我列出 *listg = malloc(sizeof(list) * 5);
-
完全不相关,但你不应该有带前导下划线的全局名称,这些是 C 标准规范保留的。
-
如果保证这样,
free不是第一个的地址是不可能通过的。free可以单独是单独保护的情况。
标签: c linked-list