创建一个顺序表并销毁它。
typedef struct _seqlist //创建一个名叫sequencelist的结构体
{
int *list;
int len;
int MAX_len;
}sequencelist;
sequencelist *creat_list(); //声明创建一个顺序表的函数
void Destroy(sequencelist *s); //声明销毁一个顺序表的函数
上面的几行代码写在头文件中,函数的实现在下面。
sequencelist *creat_list() //实现创建一个顺序表的函数
{
sequencelist *s = (sequencelist *)malloc(sizeof(sequencelist) / sizeof(char)); //定义一个变量,该变量指向sequencelist,并且为这个变量在堆中给他分配一些空间。
if(s == NULL) //如果空间分配失败,则退出程序
{
return NULL;
}
s->list = (int *)malloc(sizeof(int) / sizeof(char) * SIZE_LIST); //为结构体中的指针指向的地址开辟一块内存空间,用于放值。
if(s->list == NULL) //判断空间是否开辟成功。
{
free(s); //释放刚刚开辟的内存,防止内存泄漏
return NULL;
}
s->len = 0;
s->MAX_len = SIZE_LIST; //初始化
return s;
}
//销毁成功的顺序表
void Destroy(sequencelist *s)
{
if(s == NULL)
{
return;
}
free(s->list); //释放结构体指针指向的内存
free(s); //释放结构体变量的内存
}
int main()
{
sequencelist *s = creat_list();
if(s == NULL)
{
printf("创建失败\n");
return FALSE;
}
printf("创建成功\n");
Destroy(s);
s = NULL;
printf("销毁成功\n");
return 0;
}
总结:
1、 内存泄漏:如果我们开辟的的存储空间如果不用free释放掉,那么这块内存在堆区就会一直存在,而且在堆区中,这些内存是没有名字的,所以这块内存就会一直被占着,没法使用,就导致你的内存可使用的空间变小,这种现象就就所谓的内存泄漏。
2、 我们开辟的内存空间是在堆区中,但是我们定的变量s在栈区里,所以我们要定义一个指针指向这块内存。
数据结构之顺序表
最新推荐文章于 2024-11-06 17:24:03 发布