几百次运行后fopen()内存泄漏

时间:2015-11-13 16:26:12

标签: c visual-studio-2013 memory-leaks fopen

我正在编写一个应该从文件中读取某些级别数据的应用程序。当我运行代码(包括fopen()和fclose())超过几百次时,我收到了错误消息(我知道这意味着它无法打开文件):

Debug Assertaion失败! 程序: d:\ blahblah file:f:\ dd \ vctools \ crt \ crtwin32 \ stdio \ fgets.c 行:57 表达式:(string!= NULL)

你能帮助我理解为什么它会在三个以上的时间之后破裂吗?

 Func_Main(char * filePath, ...){
    for(int i=0;i<1000;i++){ 
        Func_1(filePath);
        ....
    }
     ....
 }

 Func_1(char* filepath){
       char   buffer[1024];
       FILE * file= NULL;
       file = fopen(filepath, "r");
       while(fgets(buffer, sizeof(buffer), file)){
             \\ do something
       }
       fclose(file);
 }

2 个答案:

答案 0 :(得分:1)

您应该检查QGroupBox的返回值。如果打开文件失败,它将返回空指针。

它会失败,因为fopen是一个转义字符,在文件名字符串中使用\

答案 1 :(得分:1)

我看到的问题:

  1. 您永远不会使用传递给Func_1的参数。您改用硬编码路径。

  2. 硬编码路径有错误。您没有逃避硬编码路径中的反斜杠。它应该是:

    file = fopen("c:\\blahblah.txt", "r");
                    ^^
    
  3. 您没有检查fopen是否成功。你假设它是成功的。使用:

    file = fopen("c:\\blahblah.txt", "r");
    if ( file == NULL )
    {
       // Deal with the error.
       perror("Unable to open the file");
    }
    
  4. 在OP编辑问题后更新

    前两点可以忽略。最后一点仍需要考虑。

    file = fopen(filepath, "r");
    if ( file == NULL )
    {
       // Deal with the error.
       perror("Unable to open the file");
    }