Suv*_*yil 4 c memory memory-management
考虑这个片段,
char *p1="";
printf("p1=%p\np1=%s\n",p1,p1);
char s1[6]="abcde";
printf("s1=%p\ns1=%s\n",s1,s1);
p1=s1;
printf("p1=%p\np1=%s\n",p1,p1);
Run Code Online (Sandbox Code Playgroud)
因为,没有任何变量在堆上分配,所以在进程结束时将释放所有分配的空间.
问题:
您的串""并"abcde"住在你的可执行文件的(只读)数据部分.加载程序时会将它们加载到内存中.
当没有更多的指针指向它时,没有更多的指针指向它.就这样.
程序有很多只读数据(例如,整个程序的代码!)它并不是真正值得关注的东西.
这不被认为是内存泄漏,就像拥有一个永远不会被调用的函数不是内存泄漏一样.加载程序后,不会分配或取消分配任何内容.