初始化链表操作时的一个内存错误
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语言的传值不传地址我是知道的,局部变量的使用范围我也是知道的,
但是结合起来看,涉及到指针的指针问题我就有些迷糊了。
要注意的是局部变量的值和地址在函数返回后都是无效的,推广下,所有
涉及到局部变量的取地址表达式都需要谨慎。
不管是什么变量,指针的指针或者别的复杂变量,不要指望给形参赋值
影响到实参,要加*的形参才可以。。。
当然具体问题还要具体分析。。。
浙公网安备 33010602011771号