10s让你知道如何释放结构体,打败double |
您所在的位置:网站首页 › 动态定义结构体 › 10s让你知道如何释放结构体,打败double |
Authur Whywait 做一块努力吸收知识的海绵~ 如果赶时间,直接向下滑动并看粗体字即可。 我们在进行做数据结构相关编程题的时候,常会遇到最后要释放结构体的情况。 这也是这部片文章需要说的内容。 文章从以下几方面入手,讲述结构体释放操作中几点值得注意的事情。 语言:C free()首先释放结构体,我们要使用到free()函数。 说到free()不得不提到malloc()。 关于malloc(),请点这里。 所以与其说是将如何释放结构体,不如说如何使用free释放结构体。 使用事项 释放结构体时,需要把结构体里面的数据结构释放之后,再释放结构体。直接上例子: typedef struct Stack{ int* val; int valSize; int top; } BSTIterator; void bSTIteratorFree(BSTIterator* obj) { if(obj && obj->val) free(obj->val); if(obj) free(obj); }如果obj本身为NULL,就没必要释放了。 关于结构体定义再看下面这个例子: typedef struct Stack{ int val[10000] int top; } BSTIterator; void bSTIteratorFree(BSTIterator* obj) { if(obj && obj->val) free(obj->val); if(obj) free(obj); }看似没问题,先释放结构体里面的数据结构然后释放结构体,其实是你对struct结构体的定义不是很理解。 看下图你可能就可以自己分析出原因了。
val[10000]为一静态数组。结构体就包括了整个数组。 而上文中提到的int* val;,说明结构体里面包括的只是一个指针,也就是存储int型数据的地址。 这就是区别。 怎么改呢? typedef struct Stack{ int val[10000] int top; } BSTIterator; void bSTIteratorFree(BSTIterator* obj) { if(obj) free(obj); }如此就可以将结构体释放干净。 总结几个malloc()就配上几个free()。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |