动态数据存储的位置
堆,它是程序中用来保存长期使用数据的地方
获取空间
使用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了