标题:malloc不free
只看楼主
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
结帖率:91.43%
已结贴  问题点数:20 回复次数:12 
malloc不free
程序代码:
a.cpp(a.exe):
#include<stdio.h>
#include<string.h>
#include<stdlib.h>


int main()
{
    char *p_a=NULL;

    p_a = (char *)malloc(sizeof(BUFSIZ));
    if(p_a != NULL)
        printf("Success malloc\n");
    else
        printf("Error malloc\n");

    return 0;

}

程序代码:
b.cpp(b.exe):
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>

int main()
{
    while(1)
    {
        system("a.exe");
        Sleep(100);
    }

    return 0;

}
这么运行b的话,会不会引起内存泄漏?
看的资料上说,堆空间在程序退出后系统会自动收回分配的内存,但是我理解windows环境下这里的程序说的是进程。那在windows环境下b.exe这么调用a.exe是开一个线程启动a.exe,还是其他的?会不会造成内存泄漏?
linux对于线程进程的概念还分不清楚,但是也有同样的疑问。
搜索更多相关主题的帖子: malloc free exe include windows 
2017-07-06 10:57
nandoulong
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2017-7-6
得分:2 
没用过Windows,这是标准c的内容,通用。malloc不释放的话,如果进程结束,指针变成野指针,内存数据被自动释放。不过你要是不结束程序就会泄露。
貌似是这样的 大佬我说错了别喷我
2017-07-06 14:00
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:2 
控制台程序 可以不用释放内存(假设你想养成一个不良的习惯的话 再假设你并非专业的程序员)

DO IT YOURSELF !
2017-07-06 14:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
那在windows环境下b.exe这么调用a.exe是开一个线程启动a.exe,还是其他的?
------ 进程
2017-07-06 18:18
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
得分:2 
这不关进程线程什么事,无论在linux 还是windows下,system执行命令相当于在终端执行一条命令,与调用执行system函数的程序并没有直接联系。
2017-07-06 22:31
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
得分:0 
回复 2楼 nandoulong
谢谢。
2017-07-07 11:00
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
得分:0 
回复 3楼 wp231957
也不是刻意不释放,但是有时候总会在哪不注意就给忘了。

版主说控制台程序是这样的,那windows(以win7为例)下的比如win32应用程序、DLL或者其他类型的是不是退出的时候就不释放?
Linux环境下,版主能否帮忙解答疑惑?

2017-07-07 11:00
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
得分:0 
回复 4楼 rjsp
感谢!
2017-07-07 11:02
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
回复 7楼 lyl930130
进程正常退出(终止) 时 操作系统 会回收内存

但是进程正在运行 如果无限制的申请内存 而不释放的话  会造成资源崩溃

而进程被非正常终止,这个情况我不是很清楚的

DO IT YOURSELF !
2017-07-07 11:03
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
得分:0 
回复 9楼 wp231957
“进程正常退出(终止) 时 操作系统 会回收内存”是对所有或者大部分操作系统的进程来说,还是仅对windows中的控制台的应用程序?
2017-07-07 11:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-479206-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.206892 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved