在eclipse cdt中调试时fopen失败了

时间:2012-11-28 14:06:19

标签: windows eclipse debugging mingw eclipse-cdt

请查看以下代码段:

#include <stdio.h>
int main ()
{
FILE * pFile;

pFile = fopen ("c:\\Temp\\test.txt","rb");
if (pFile!=NULL)
{
  printf("opened\n");
  fclose (pFile);
}
else{
  printf("error\n");
}
  return 0;
}

如果我编译此代码段并运行它,则没有任何失败。 如果我在调试模式下执行代码,fopen将失败并显示以下消息:

Thread [1] 0 (Suspended : Signal : SIGSEGV:Segmentation fault)  
  wtoi64() at 0x77b35eab    
    wtoi64() at 0x77b35a70  
    ntdll!RtlpSetUserPreferredUILanguages() at 0x77ba5eff    
    ntdll!KiRaiseUserExceptionDispatcher() at 0x77b6a3ba    
    toi64() at 0x77b35a70   
    msvcrt!malloc() at 0x775c9d45   
    strcpy_s() at 0x775cf5d3    
    open_osfhandle() at 0x775d2b18  
    0x18    
    0xbf39e545  
    <...more frames...

开发环境:

Windows 7
Eclipse CDT Juno Service Release 1
MINGW 4.7

编译器设置:

-O0 -g3 -Wall -c -fmessage-length=0

有没有人知道为什么fopen失败以防我启动调试器并逐步执行每条指令直到fopen(..)?

我期待着你的回答。谢谢你的推荐。

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。

在fopen调用之前,我执行了以下代码:

char* ptr = NULL;
int size = 1024;
ptr = malloc(sizeof(size));
memset(ptr, 0, size);
fopen("binary.txt", "rt");

问题是,memset应用于1024字节,尽管只分配了sizeof(size)字节。 随后的fopen调用由于先前在1024字节上使用的memset调用而导致堆内存损坏而崩溃。

到目前为止感谢!