Memory zsh';s对程序内存泄漏的反应

Memory zsh';s对程序内存泄漏的反应,memory,memory-management,operating-system,zsh,Memory,Memory Management,Operating System,Zsh,我正在试验内存泄漏。当我从zsh运行以下程序时,它会启动并在一段时间后终止。zsh在做吗?谁决定什么时候杀它 #包括 #包括 int main(){ int*a=(int*)malloc(sizeof(int)); *a=5; std::cout这取决于您如何运行它,但通常是操作系统在malloc返回NULL(如果无法分配新内存)并尝试写入值(5)后终止您的进程所以基本上是一个NULL指针解引用,你的代码试图访问地址NULL的内存 从哲学上讲,是程序员决定编写错误代码并使其程序崩溃。:-) 编辑

我正在试验内存泄漏。当我从zsh运行以下程序时,它会启动并在一段时间后终止。zsh在做吗?谁决定什么时候杀它

#包括
#包括
int main(){
int*a=(int*)malloc(sizeof(int));
*a=5;

std::cout这取决于您如何运行它,但通常是操作系统在
malloc
返回
NULL
(如果无法分配新内存)并尝试写入值(
5
)后终止您的进程所以基本上是一个
NULL
指针解引用,你的代码试图访问地址
NULL
的内存

从哲学上讲,是程序员决定编写错误代码并使其程序崩溃。:-)

编辑:另一方面,这可能仍然是操作系统(或其程序员)的错误如果它试图向您的进程过度分配内存。例如,默认情况下,Linux中启用了内存过度分配。这意味着即使操作系统没有可用内存,它也要依赖于进程,让内存分配方法成功,并在进程首次访问时实际尝试分配内存。这可能会导致一些情况当
malloc
成功并返回非
NULL
值时,稍后当进程尝试访问该内存时,操作系统将尝试分配该内存。如果操作系统失败,则必须阻止/暂停该进程或将其杀死。Linux通常运行其臭名昭著的OOM killer,当内存分配失败时选择要杀死的进程。并且通常,要终止的进程是分配大量内存的进程,即您的进程