先说一下问题现场。
代码如下
free(volthisframe->Tops);
free(volthisframe->Bots);
printf("what\n");
free(volthisframe->SCTops);
free(volthisframe->SCBots);
运行时出现段错误,“what”随机出现,也就是说可能是打印前出现段错误,也可能是打印后出现段错误。但最终定位就在这几行free里面。
人格保证,各个指针都有初始化,都有检查,代码这里没有列出来而已。
困扰了我2,3天时间,因为完全无法解释free出现段错误这个问题背后的原因,指针是绝对正常的。后来查阅了大量资料,终于理了个脉络出来,大概知道怎么回事了。进一步的debug还在进行中。。。
提醒:这只是泛泛而谈,因为内存管理的问题跟语言、编译器、操作系统都有关系,windows下和linux就大不相同,本文也没有想精确定位,只是给个思路而已。
下面是具体分析,首先是参考资料
参考资料
这个问题跟C语言和编译器的内存分配,linux的内存管理都有关系,一个一个来。
出现段错误的情况,基本还是栈溢出(使用的内存空间大于系统默认分配的栈空间)[2][5]
数组越界[3]
访问不存在的地址(指针NULL)[5]
访问系统保护的内存地址[5]
访问只读的内存地址[5]
关于入栈、出栈[1]讲了一点,在子函数调用的时候的情况,注意这只是多数情况,具体的系统很可