调程序的过程中不断碰到这个错误,编译时候没有错误,运行时出错。
网上查找的结果是,与指针或者地址释放的过程有关的错误,对同一个对象执行了两次free()操作。但是仔细看自己的代码,也看不出什么问题。
后来发现,是因为一个函数中自己创建了一个与输入参数同名的变量,类似下面的形式:
void fun(type param){
…
if(…){
…
for(;;){
type param = …;
…
}
}
}
函数嵌套比较深,习惯性的给每个type类型都默认的称为param名字,比如我总是管message类型起名叫msg这样。我的理解是,嵌套在内层新建的param,会覆盖形参。在离开fun块的时候,形参的函数名仍在,指向的地址仍在,但是指向的那个空间已经被另外一个param给释放了,就引发了标题中提到的错误。
所以给我们的教训是,应当谨慎给变量取名,取名之前请仔细查看函数形参列表等会发生冲突的位置。
版权声明:本文为solofly752原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。