初始化链表操作时的一个内存错误

void InitList2( List* L )
{
   List tmp;
   tmp = (List)malloc(sizeof(struct Node));
   if( !tmp )
    printf("Init List error\r\n");
   tmp->Next = NULL;
   L = &tmp;
}

 

错误原因:

这是一段链表初始化的程序,我的本意是创建一个头结点,然后利用传值

的方式把内存的指针传出去,程序运行的时候直接产生异常,原因是把局部

变量的地址传给了L,局部变量在函数完成的时候会被销毁,此时他的地址值

是无效的,还有个问题:直接给L赋值,C语言是传值的,所以就算赋值给L,

实际的传入的参数是没有变的。

如何更改:

  L = &tmp 改成 *L = tmp

总结:

  C语言的传值不传地址我是知道的,局部变量的使用范围我也是知道的,

但是结合起来看,涉及到指针的指针问题我就有些迷糊了。

  要注意的是局部变量的值和地址在函数返回后都是无效的,推广下,所有

涉及到局部变量的取地址表达式都需要谨慎。

  不管是什么变量,指针的指针或者别的复杂变量,不要指望给形参赋值

影响到实参,要加*的形参才可以。。。

  当然具体问题还要具体分析。。。

 

posted on 2014-09-26 10:36  qisewai  阅读(199)  评论(0)    收藏  举报

导航