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

fopen奇怪问题

    来源: 互联网  发布时间:2015-10-02

    本文导语:  linux7.2.一fopen就内存错误。gdb可以定位到哪个变量内存错误吗? 错误如下: 886                                             sprintf(tmpname,"%s%s",path,fname); (gdb) n 888                      ...

linux7.2.一fopen就内存错误。gdb可以定位到哪个变量内存错误吗?
错误如下:
886                                             sprintf(tmpname,"%s%s",path,fname);
(gdb) n
888                                             printf("temp name= %sn",tmpname);
(gdb) n
temp name= /usr/lic3g/data/pas3g/1/6/0/0/8614101110061/http/message.real.com/Msg/7.0/win32
889                                             fp=NULL;
(gdb) n
890                                             fp=fopen(tmpname,"a");
(gdb) n

Program received signal SIGSEGV, Segmentation fault.
0x4207abfd in free () from /lib/i686/libc.so.6

大家觉得是什么错误?我觉得是open的时候和某个变量内存冲突了。或者某个变量早就越界当fopen的时候就出问题了。问题是 能用gdb定位到哪个变量出错马?

|
你的tmpname应该是char *型的吧,fopen使用应该是没有问题的,你看一下你要打开的文件你有没有append 的权限。
另外,sprintf的使用有问题,sprintf的第一个参数应该是一个分配了的内存空间,而不应该是一个指向常量字符串的指针。这里你想向一个打开的文件输入内容应该用fprintf(FILE *stream,const char *format,...).
而接下来又使用printf又让人不明白了,他只能用于输出字符串

|
这好像和编译器有关吧,VC编译器在Debug版本时,分配内存时,会在越界的地方加入越界标记,所以当数组越界时,马上抛出异常。但是release版本时把这个标记去掉了,所以越界时不能马上发现,
其他编译器道理一样,gcc可能就是没有加这种越界检查,所以越界时根本不知道,直道他非法访问了不允许访问的内存时才core dump,可是这时并不是第一现场,呵呵!所以越界问题比较难查。

是不是这个道理呢!?

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












  • 相关文章推荐
  • codeblocks8.02 for linux,程序可以编译通过,但是通过右键“查找fopen函数的声明”或“实现”,都是提示“没有找到:fopen”,为什么
  • 关于fopen函数
  • linux程序关于fopen的疑问!
  • fopen能这么用吗?
  • fopen 打开一个文件多次突然失败
  • open和fopen的区别?
  • ARM平台下fopen打开文件出现段错误
  • fopen 不能打开文件
  • fopen出的错?
  • fopen函数打不开一个郁闷的文件
  • 请问为何fopen()函数不能正确打开文件。
  • 想看fopen函数的源码
  • 为什么我用fopen打开两个不同的文件,得到相同的指针地址呢
  • 请教 ,为什么fopen("./hzk16", "rb")总返回NULL
  • 请教大家Linux下fopen最大能打开几G文件?
  • fopen的缓冲区是虚拟文件系统,还是在lib层?
  • fopen的缓冲区是虚拟文件系统,还是在lib层? iis7站长之家
  • 我在linux下用fopen打不开中文名的文件,请帮忙
  • 在Linux下怎样用fopen打开一个文件?
  • PHP fopen()和 file_get_contents()应用与差异介绍


  • 站内导航:


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

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

    浙ICP备11055608号-3