调程序的过程中不断碰到这个错误,编译时候没有错误,运行时出错。

网上查找的结果是,与指针或者地址释放的过程有关的错误,对同一个对象执行了两次free()操作。但是仔细看自己的代码,也看不出什么问题。

后来发现,是因为一个函数中自己创建了一个与输入参数同名的变量,类似下面的形式:

void fun(type param){





if(…){





for(;;){



type param = …;





}



}

}

函数嵌套比较深,习惯性的给每个type类型都默认的称为param名字,比如我总是管message类型起名叫msg这样。我的理解是,嵌套在内层新建的param,会覆盖形参。在离开fun块的时候,形参的函数名仍在,指向的地址仍在,但是指向的那个空间已经被另外一个param给释放了,就引发了标题中提到的错误。

所以给我们的教训是,应当谨慎给变量取名,取名之前请仔细查看函数形参列表等会发生冲突的位置。



版权声明:本文为solofly752原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/solofly752/article/details/46495397