c语言 free函数报段错误,linux下C编程free()时出现飘忽诡异的段错误(核心已转储)问题...

博客讲述了在Linux环境下,C编程时遇到free函数报段错误的问题。问题出现在释放内存时,尽管指针已经初始化且正常,但free操作仍触发段错误。分析涉及到栈溢出、数组越界、访问不存在地址等可能导致段错误的原因,并指出在某些情况下,错误可能在free时才被系统检测到,导致定位困难。文章提供了一些参考资料和内存管理的概述。
摘要由CSDN通过智能技术生成

先说一下问题现场。

代码如下

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]讲了一点,在子函数调用的时候的情况,注意这只是多数情况,具体的系统很可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值