当前位置:  技术问答>linux和unix

这个coredump让我头发白了

    来源: 互联网  发布时间:2015-04-13

    本文导语:  在solaris上,用gcc编译的单线程纯C程序,总在一个函数中出现coredump。但程序运行时会上百次的调用这个函数,不一定那次就会core dump。分析core文件,发现是地址越界,但想破头也想不出为什么会地址越界。 具体现...

在solaris上,用gcc编译的单线程纯C程序,总在一个函数中出现coredump。但程序运行时会上百次的调用这个函数,不一定那次就会core dump。分析core文件,发现是地址越界,但想破头也想不出为什么会地址越界。
具体现象是这样的(由于逻辑比较复杂,我就不贴出源代码了):
调用函数func1有三个局部变量:
long           a;
unsigned short b;
unsigned char  c;
a在func1中被赋值,b,c,d都没在func1中用到。
func1调用func2,这四个变量都被传到func2中:
int func2(a,&b,&c,0)
在core文件中发现,传入func2的a,变成了一个莫名其妙的很大的数,&c也已经越界。但这怎么可能呢???!!!它们都是局部变量,不可能被别的程序或线程更改。到底为什么?
给我出个主意,指个方向,万分感谢!
为什么只能给100分,我愿意用上我所有的分。

|
其他地方的指针飞了,或缓冲区溢出了。

|
调用几百次,那看起来是其他地方的内存管理(也有可能是其他系统资源)上出了问题。
仔细查查你的代码吧。或者请别人看看(自己的错误有时候很难自己发现)。

|
会不会是FUNC2()参数定义有问题,能不能把FUNC2定义和调用的语句都贴上来看看

|
其他地方非法内存使用。如果你的代码很大,那只能自己一点点看了。或者如果你是用Linux的话,安装Valgrind(http://devel-home.kde.org/~sewardj/)来查找。

|
建议初始化一下,置为0试试。
资料再详细一点吧,最好把函数贴出来

|
指针飞了,或其他地方有缓冲区溢出

|
不一定就是这里的问题

|
用工具吧。什么平台?有purify吗?或者你的dbx有没有内存使用检查?

|
此类问题一般是内存错误积累,如果不想查代码,就装一个purify,查一下错误使用内存的情况。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • coredump调试
  • purify编译后出现coredump
  • 为什么常常会coredump?
  • sun gdb "Bus Error(coredump)"
  • linux下的诡异coredump问题
  • 程序运行时报错..Memory fault(coredump) 怎么办...
  • hp unix coredump在最后一行return 0上
  • Web服务器/前端 iis7站长之家
  • [高手进]海量数据网络通讯,当访问请求达3万以上时,出现coredump错误。一般是什么原因?
  • for循环中为什么在第8次循环会出现“memory fault coredumpe”的错误??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3