鱼C论坛

 找回密码
 立即注册
查看: 909|回复: 4

小白请问大佬们用malloc申请的内存空间会在整个程序运行完后被操作系统收回嘛?

[复制链接]
发表于 2022-2-12 13:36:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct lianbiao
{
        int shujuyu;
        struct lianbiao * zhizhenyu;
}NODE, *PNODE;

PNODE chuangjian(void);
void shuchu(PNODE To);
int changdu(PNODE To);
void paixu(PNODE To);
bool charu(PNODE To, int pos, int val);
bool shanchu(PNODE To, int pos,int * pVal);

int main(void)
{
        int val = 0;
        PNODE To = NULL;
        To = chuangjian();
        shuchu(To);
       
        int len = changdu(To);
        printf("链表的长度为:%d\n", len);
       
        paixu(To);
        shuchu(To);
       
        if ( charu(To, 3, 10) )
        {
                printf("插入成功,自动为您遍历当前链表!\n");
                shuchu(To);
        }
        else
        {
                printf("插入失败,自动为您遍历当前链表!\n");
                shuchu(To);
        }
       
        if ( shanchu(To, 3, &val) )
        {
                printf("删除成功,您删除的值是%d,自动为您遍历当前链表!\n", val);
                shuchu(To);
        }
        else
        {
                printf("删除失败,您删除的节点不存在,自动为您遍历当前链表!\n");
                shuchu(To);
        }
       
        return 0;       
}

PNODE chuangjian(void)
{
        int len = 0;
        int i, val;
        PNODE To = (PNODE) malloc (sizeof(NODE));
        if (NULL == To)
        {
                printf("动态内存分配失败,程序终止!\n");
                exit(-1);
        }
       
        printf("请输入链表的长度:");
        scanf("%d", &len);
       
        PNODE Wei = To;
        To->zhizhenyu = NULL;
       
        for (i=0; i<len; ++i)
        {
                printf("请输入第%d个节点的值:", i+1);
                scanf("%d", &val);
               
                PNODE Xin = (PNODE) malloc (sizeof(NODE));
                if (NULL == To)
                {
                        printf("动态内存分配失败,程序终止!\n");
                        exit(-1);
                }
               
                Xin->shujuyu = val;
                Xin->zhizhenyu = NULL;
                Wei->zhizhenyu = Xin;
                Wei = Xin;
        }
       
        return To;
}

void shuchu(PNODE To)
{
        PNODE p = To->zhizhenyu;
       
        while (NULL != p)
        {
                printf("%d ", p->shujuyu);
                p = p->zhizhenyu;
        }
       
        printf("\n");
       
        return;
}

int changdu(PNODE To)
{
        PNODE p = To->zhizhenyu;
        int len = 0;
        while (NULL != p)
        {
                p = p->zhizhenyu;
                len++;
        }
       
        return len;
}


void paixu(PNODE To)
{
        int len = ( changdu(To) );
        PNODE p, q;
        int i, j, t;
       
        for (i=0,p=To->zhizhenyu; i<len-1; ++i,p=p->zhizhenyu)
        {
                for(j=i+1,q=p->zhizhenyu; j<len; ++j,q=q->zhizhenyu)
                {
                        if (p->shujuyu > q->shujuyu)
                        {
                                t = p->shujuyu;
                                p->shujuyu = q->shujuyu;
                                q->shujuyu = t;
                        }
                }
        }
       
        return;
}

bool charu(PNODE To, int pos, int val)
{
        int i = 0;
        PNODE p = To;
       
        while (p!=NULL && i<pos-1)
        {
                p = p->zhizhenyu;
                ++i;
        }
       
        if (i>pos-1 || NULL==p)
                return false;
       
        PNODE Xin = (PNODE) malloc (sizeof(NODE));
        if (NULL == Xin)
        {
                printf("动态内存分配失败,程序终止!\n");
                exit(-1);
        }
       
        Xin->shujuyu = val;
        Xin->zhizhenyu = NULL;
        PNODE q = p->zhizhenyu;
        p->zhizhenyu = Xin;
        Xin->zhizhenyu = q;
       
        return true;
}

bool shanchu(PNODE To, int pos, int * pVal)
{
        int i = 0;
        PNODE p = To;
       
        while (To->zhizhenyu!=NULL && i<pos-1)
        {
                p = p->zhizhenyu;
                ++i;
        }
       
        if (i>pos-1 || p->zhizhenyu==NULL)
                return false;
               
        PNODE q = p->zhizhenyu;
        *pVal = q->shujuyu;
        p->zhizhenyu = p->zhizhenyu->zhizhenyu;
        free(q);
        q = NULL;
       
        return true;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-12 14:12:44 | 显示全部楼层
一般确实如此,程序关闭操作系统会回收的。但最好程序员自己做内存释放。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-12 14:18:26 | 显示全部楼层
傻眼貓咪 发表于 2022-2-12 14:12
一般确实如此,程序关闭操作系统会回收的。但最好程序员自己做内存释放。

谢谢,只是我见老师写的时候都没有free,我只写个作业应该没啥问题吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 14:51:56 | 显示全部楼层
2086173258 发表于 2022-2-12 14:18
谢谢,只是我见老师写的时候都没有free,我只写个作业应该没啥问题吧。

大致上如果代码不是长期运作,不会有问题,但尽量养成释放的习惯。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-12 15:01:40 | 显示全部楼层
傻眼貓咪 发表于 2022-2-12 14:51
大致上如果代码不是长期运作,不会有问题,但尽量养成释放的习惯。

好的,谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 18:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表