C语言动态存储

动态数据存储的位置

堆,它是程序中用来保存长期使用数据的地方

获取空间

使用malloc()函数进行申请

如何释放

使用free()函数进行释放

使用malloc

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//结构定义函数体的外面多个函数才能共享
typedef struct island {
    char *name;
    char *open;
    char *close;
    struct island *next;
} island;
void display(island *start);
void release(island *start);
island* create();

int main()
{
    char name[80];
    fgets(name, 80, stdin);
    island *i = create(name);

    fgets(name, 80, stdin);
    island *i1 = create(name);
    i->next = i1;
    display(i);
    release(i);
}

island* create (char *name)
{
    island *i = malloc(sizeof(island));
    //注意在此处一定用用strdup在堆上存储,如果都是在栈上存储,函数结束后会释放内存空间,每次都只能保存最后传入的name指针指向的值
    i->name = strdup(name);
    i->open = "09:00";
    i->close = "17:00";
    i->next = NULL;

    return i;
}


void display(island *start) {
    island *i = start;
    for (;i!=NULL;i=i->next) {
        printf("name:%s,open:%s-%s\n",i->name, i->open, i->close);
    }
}

void release(island *start) {
    island *i = NULL;
    island *next = NULL;

    for(;i!=NULL;i=next) {
        next = i->next;
        free(i->name);
        free(i);
    }
}

为什么island在堆上申请了内存,name还需要在堆上申请内存?

因为结构只是把不同类型的数据写在一起,封装成一个大的数据类型,它不是创建了一个类型把所有数据都存储在它里面

使用release的时候需要释放那些堆上的内存?

因为name,和island在堆上申请了内存,所以只要释放他们的内存就好了,但是需要注意的是先释放name的内存,不然先释放了island就找不到name了
坚持原创技术分享,您的支持将鼓励我继续创作!