2086173258 发表于 2022-2-12 13:36:05

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

#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;
}

傻眼貓咪 发表于 2022-2-12 14:12:44

一般确实如此,程序关闭操作系统会回收的。但最好程序员自己做内存释放。

2086173258 发表于 2022-2-12 14:18:26

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

谢谢,只是我见老师写的时候都没有free,我只写个作业应该没啥问题吧。

傻眼貓咪 发表于 2022-2-12 14:51:56

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

大致上如果代码不是长期运作,不会有问题,但尽量养成释放的习惯。{:10_254:}

2086173258 发表于 2022-2-12 15:01:40

傻眼貓咪 发表于 2022-2-12 14:51
大致上如果代码不是长期运作,不会有问题,但尽量养成释放的习惯。

好的,谢谢。
页: [1]
查看完整版本: 小白请问大佬们用malloc申请的内存空间会在整个程序运行完后被操作系统收回嘛?