讨论/算法和数据结构/我好像在 算法精讲C语言描述中找到一处错误/
我好像在 算法精讲C语言描述中找到一处错误

在 c 语言中函数我认为可以这么理解: 有一个函数 foo(a),当我调用 foo(1) 时,就是在另一块区域中创建一个叫做 a 的形式变量,并让 a=1,然后执行 foo 下面的 code;
当这个a的类型是指针时,如果我这样定义foo:

int foo(int * a)
{
a=malloc(sizeof(int));
return 1;
}

我这样调用:foo(b);
不管我传入的是空指针还是非空指针,这个 malloc 的地址并没有赋值给实际参数 b,而是传给了形式参数 a,这个函数是无效的,除非把返回值改为 a
在书中的链表一节,他把链表元素删除操作声明为 int list_rem_next(List * list,ListElmt * element,const void * data); 这个 data 保存删除的链表元素所指向的值,
在链表销毁操作

void list_destroy(List * list)
{
void * data;//空指针
/*Remove each element*/
while(list_size(list)>0)
    if(list_rem_next(list,NULL,(void **)&data))/*就是这里*/==0 && list->destroy != NULL)
        list->destroy(data)
}

这刚好就犯了上面赋值无效的错误,并且我完整抄了一遍代码,调试时直接给了我一个段错误

展开讨论
Steiner发起于 2019-10-11
最近编辑于 2019-10-15

应该是在函数foo中指针指向的内存空间发生了变化

图片.png
输出:
图片.png