已放弃(核心已转储)和段错误(核心已转储)原因

来源:互联网 发布:淘宝买到假货怎么投诉 编辑:程序博客网 时间:2024/06/05 19:38

今天调h264编码程序的时候,出现了个错误   “已放弃(核心已转储)”,此前碰到过几次“段错误(核心已转储)”,做下笔记。

段错误(核心已转储):通常是内存越界造成的,可以检查是否使用了NULL的指针,或者数组越界。调试收到的信号是SIGSEGV。

已放弃(核心已转储):我碰到的这次是因为试图用free()函数释放一个全局变量。free只能释放用户申请在堆里的内存,用malloc()函数申请的内存就是在堆里面的,这些内存才能用free释放。使用的时候调用层次多了可能忘了这是一个全局变量。示例程序如下:

Encoder en;close(Encoder * t){    free(t);}void main(){   close(&en);}

看起来调用的变量完全没有问题,传进去的是Encoder *型的指针,错就错在en不是存在用户申请的在堆上的内存中。

用gdb调试接收到的信号是SIGABRT。


0 0
原创粉丝点击