分享
三行代码  ›  专栏  ›  技术社区  ›  user13863346

不使用fclose()重新分配文件*可以吗?

  •  1
  • user13863346  · 技术社区  · 1 周前

    假设我有以下代码:

    FILE *x = fopen("story.txt",r);
    if(x!=NULL)
    {
        x = fopen("story.txt",wb); /* <- Does this waste/leak memory ?? */
        /* ... do something .... */
        /* if(fclose(x)==EOF)...else... */
    }
    else
    {
        printf("story.txt does not exist\n");
    }
    

    story.txt 是在记忆中创造的,没有 fclose(x) 覆盖 带着 新的 '缓冲区。这个假设正确吗?我是在泄漏内存还是在浪费内存,或者这个方法可以吗?

    1 回复  |  直到 1 周前
        1
  •  5
  •   ShadowRanger    1 周前

    你刚刚泄露了一个文件句柄。如果你做的足够多,你将用尽打开的文件句柄来分配,所有试图打开一个文件的尝试都将失败。别那样做。 fclose 你的 FILE*

    没有理由认为“内存区域”会在这里被覆盖;您正在重写 指针 stdio 缓冲区、底层内核文件句柄的描述符等)。它不会覆盖所指向的内存,而只会分配一秒钟 malloc 对同一个指针重写第一个 马洛克