当前位置: 技术问答>linux和unix
setjmp SEGMENTATION FAULT 错误。
来源: 互联网 发布时间:2015-07-18
本文导语: linux环境下,程序中调用setjmp。运行此程序,出现Segmentation fault 错误, 删掉setjmp调用程序运行正常。 换成sigsetjmp()也出现同样错误。 而且我已经把 setjmp函数放在最靠近main()入口的地方了,还是出错。 其他...
linux环境下,程序中调用setjmp。运行此程序,出现Segmentation fault 错误,
删掉setjmp调用程序运行正常。
换成sigsetjmp()也出现同样错误。
而且我已经把 setjmp函数放在最靠近main()入口的地方了,还是出错。
其他小程序:调用setjmp的都运行正常。
查了网上的资料,有说这个bug的。但是我也没给返回值赋值。
This is a very common bug with setjmp() and longjmp() -- to use them properly, you CANNOT RETURN FROM THE PROCEDURE THAT CALLS setjmp().
URL:http://www.cs.utk.edu/~plank/plank/classes/cs360/360/notes/Setjmp/lecture.html
删掉setjmp调用程序运行正常。
换成sigsetjmp()也出现同样错误。
而且我已经把 setjmp函数放在最靠近main()入口的地方了,还是出错。
其他小程序:调用setjmp的都运行正常。
查了网上的资料,有说这个bug的。但是我也没给返回值赋值。
This is a very common bug with setjmp() and longjmp() -- to use them properly, you CANNOT RETURN FROM THE PROCEDURE THAT CALLS setjmp().
URL:http://www.cs.utk.edu/~plank/plank/classes/cs360/360/notes/Setjmp/lecture.html
|
using valgrint to check the conflict.
|
我的觉得你的问题应该就是“从调用setjmp()的函数中返回了”
当从调用setjmp()的函数中返回时,linux的内存管理机制,确切的说是stack的管理机制会回收setjmp()所在的函数占用的栈空间,所以,保存fp及sp的jmp_buf也就不复存在了。所以,当利用longjmp()跳回时,自然就会出现segment fault!
当从调用setjmp()的函数中返回时,linux的内存管理机制,确切的说是stack的管理机制会回收setjmp()所在的函数占用的栈空间,所以,保存fp及sp的jmp_buf也就不复存在了。所以,当利用longjmp()跳回时,自然就会出现segment fault!
|
是不是没给jmp_buf的参数分配空间?
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。