数据结构之顺序表

来源:互联网 发布:组态软件学哪个 编辑:程序博客网 时间:2024/05/22 07:41
创建一个顺序表并销毁它。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在栈区里,所以我们要定义一个指针指向这块内存。