Memory leaks 虚拟内存:未折叠malloc上的内存泄漏?

Memory leaks 虚拟内存:未折叠malloc上的内存泄漏?,memory-leaks,Memory Leaks,我被告知上面的代码会导致内存泄漏。但借助虚拟内存: 假设可执行文件是a.out,那么a.out有自己的寻址空间和页表 当a.out在没有free(str)的情况下终止时,a.out的虚拟内存空间发生内存泄漏 然而,在终止之后(或者可能在父进程重新获得终止的进程之后?),关于a.out内存的数据结构也会被破坏 这是否意味着只要进程终止,内存泄漏是完全不可能的?C标准对程序退出后发生的情况没有任何说明 这是一个环境问题 然而,绝大多数情况下,将malloc竞技场作为流程空间的一部分,它会随着流程自动

我被告知上面的代码会导致内存泄漏。但借助虚拟内存:

  • 假设可执行文件是
    a.out
    ,那么
    a.out
    有自己的寻址空间和页表
  • a.out
    在没有
    free(str)
    的情况下终止时,
    a.out
    的虚拟内存空间发生内存泄漏
  • 然而,在终止之后(或者可能在父进程重新获得终止的进程之后?),关于
    a.out
    内存的数据结构也会被破坏

  • 这是否意味着只要进程终止,内存泄漏是完全不可能的?

    C标准对程序退出后发生的情况没有任何说明

    这是一个环境问题

    然而,绝大多数情况下,将
    malloc
    竞技场作为流程空间的一部分,它会随着流程自动神奇地释放出来


    内存泄漏通常与您无法再访问(例如,空闲)的内存有关,因为您用其他值重写了指向它的指针,并且只有在进程存在时,这才可能是一个潜在的问题。

    如果在释放分配的空间之前更改指针
    str
    ?这个过程结束后会造成伤害吗?@wlnirvana,不会,出于同样的原因。它在进程退出时被清理了,我知道了。那么
    malloc
    竞技场作为流程空间的一部分到底是什么呢?这与现代操作系统上的虚拟内存有关吗?只是无关紧要。进程获得一块称为虚拟内存的连续内存(例如位置0到4G)。他们就是这么用的。操作系统将虚拟内存地址映射到物理内存,以便两个进程可以具有相同的地址(虚拟)和不同的位置(物理,包括在需要时临时从硬盘上保存)。进程实际上只看到它们的虚拟内存,包括动态分配内存的mallocarena。
    int main()
      {
        char * str = (char *) malloc(100);
        return 0;
      }