假设我有以下C代码:

int main () {
  int *p = malloc(10 * sizeof *p);
  *p = 42;
  return 0;  //Exiting without freeing the allocated memory
}

当我编译和执行C程序时,即在内存中分配了一些空间后,在我退出应用程序和进程终止后,我分配的内存是否仍然被分配(即基本上占用了空间)?

推荐答案

这取决于操作系统.大多数现代(以及所有主要)操作系统都会在程序结束时释放程序未释放的内存.

依赖这一点是不好的做法,最好显式地释放它.问题不仅仅在于您的代码看起来很糟糕.您可能会决定将您的小程序集成到一个较大的、长期运行的程序中.一段时间后,您必须花费数小时来追踪内存泄漏.
依赖操作系统的功能也会降低代码的可移植性.

C++相关问答推荐

uintPtr_t上的算术

Bison解析器转移/减少冲突

ATTiny1606定时器TCA 0中断未触发

创建一个fork导致fget无限地重新读取文件

如果我释放其他内容,返回值就会出错

可以将C变量限制为特定的读/写速度吗?

使用C时,Windows CMD中的argc参数是否包含重定向命令?

为什么GDB/MI进程的FIFO循环中有read()阻塞

如何在C语言中正确打印图形

每次除以或乘以整数都会得到0.0000

CGO:如何防止在使用CGO在包中包含C头文件时出现多个定义...&q;错误?

错误...的多个定义(&Q)首先在这里定义&

For循环不会迭代所有字符串字符吗?(初学者问题)

我可以创建适用于不同endian的 colored颜色 struct 吗?

使用正则表达式获取字符串中标记的开始和结束

为什么会导致分段故障?(C语言中的一个程序,统计文件中某个单词的出现次数)

访问未对齐联合的成员是否为未定义行为,即使被访问的成员已充分对齐?

memcmp 是否保证按顺序比较字节?

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?

Linux memcpy 限制关键字语法