C学习笔记(1)--动态分配内存

dynamic.c
这个函数是一个动态链表的建立函数

NODE * creatList()
{
        NODE *head,*previous,*current;

        current = (NODE *)malloc(sizeof(NODE));
        previous = (NODE *)malloc(sizeof(NODE));

        printf("please input the value of the first NODE:");
        scanf("%d",&current->value);

        previous->value = 0;

        head=current;

        while(current->value >previous->value)
        {
                previous = current;

                current = (NODE *)malloc(sizeof(NODE));

                previous->link = current;

                printf("please input the next value:");
                scanf("%d",&current->value);
                if(current->value == 0)
                {
                        free(current);
                        current=NULL;
                        return head;
                }
        }

        return NULL;
}

test.c

char *test()
{
    char * str="123456";
    return str;
}
    在编译的时候,test.c会报错误,说str属于局部变量,不能作为返回值;所谓的局部变量就表示test()函数执行完之后,会释放str的内存。而createList()则编译通过。
    那么问题来了,head同样是在函数内部声明的局部变量,也应该不能作为返回值。
    这就要说到程序的动态存储区了。
    动态存储区分为堆和栈,局部变量存放在栈区,执行完后自动释放;
    而动态分配的内存是存放在堆区,它的释放是依赖于free和delete函数的。
    所以head是能够作为函数返回值的。
    (注意C的动态内存分配由malloc和free组成;C++由new和delete组成)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值