[问题] 为什么会segmentation fault?

楼主: d630200x (DOGE)   2019-10-16 19:25:38
int makeList(List_t* list)
{
list = malloc(sizeof(List_t));
if(!list){
return list_makeFail;
}else{
return list_success;
}
}
bool isEmpty(List* list)
{
return (list->head == NULL);
}
int main()
{
int ret;
List_t* testList;
ret = makeList(testList);
printf("make list is %d\n", ret);
ret = isEmpty(testList);
printf("list is empty : %s\n", ret ? "true":"false");
return 0;
}
测了一下是死在isEmpty()
另外试了一下:
List_t testList = malloc(sizeof(List_t));
isEmpty(testList);
这样是没问题的,我是哪边的观念有错误吗?
平台是centos7,用的是C
作者: ab4daa (nooooooooooooooooooo)   2019-10-16 19:47:00
makeList里面malloc的pointer没传出来所以isEmpty一用就爆
作者: withoutshine (何必帮别人想那么多)   2019-10-16 20:56:00
没看到 List_t 的宣告,但我猜你需要的是a pointer to a pointer
作者: loveme00835 (发箍)   2019-10-17 00:57:00
因为爱
作者: Ryspon (Ry)   2019-10-17 14:19:00
推三楼,另外可能也要复习一下 call by value 跟 pointer
作者: dces4212 (flawless)   2019-10-17 20:58:00
两种做法,不是用 ptr to ptr 就是回传 malloc 拿到的内存位置给 testList,你这实作比较适合用前者
作者: Gway (我爱的你 也爱我 好吗?)   2019-10-18 16:50:00
pass pointer 变量到fun中会是一个副本(I.e copy)你的 makeList(List_t* list)中的list 不是你原本预期main里面的testlist变量

Links booklink

Contact Us: admin [ a t ] ucptt.com