菜鸟问结构体指针分配的问题
时间:2010-07-28
来源:互联网
A方法:
struct T t;
Struct *T pt = &t;
B方法
Struct *T pt = (T*)malloc(sizeof(T));
A和B是不是最后的结果都一样?
struct T t;
Struct *T pt = &t;
B方法
Struct *T pt = (T*)malloc(sizeof(T));
A和B是不是最后的结果都一样?
作者: 莫良23 发布时间: 2010-07-28
A方法在栈上分配空间
B方法在堆上分配空间
B方法在堆上分配空间
作者: 聪聪知不道 发布时间: 2010-07-28
请问有什么区别,谢谢
作者: 莫良23 发布时间: 2010-07-28
B方法得free吧
作者: zhangsuozhu 发布时间: 2010-07-28
http://zhidao.baidu.com/question/6117772.html
栈里分配的内存只在本函数中有效。出来该函数,分配的空间就收回了。 堆则不然。但堆分配了的空间需手动释放。程序中不会自动回收该空间。除非程序退出,由操作系统回收整个进程占用的内存空间。(有些操作系统可能进程退出都不回收)
例如一个错误的用法:
复制代码
栈里分配的内存只在本函数中有效。出来该函数,分配的空间就收回了。 堆则不然。但堆分配了的空间需手动释放。程序中不会自动回收该空间。除非程序退出,由操作系统回收整个进程占用的内存空间。(有些操作系统可能进程退出都不回收)
例如一个错误的用法:
- char *strdup_erro(char *str)
- {
- char buf[512] = {0};
- strncpy(buf, str, sizeof(buf);
- return buf;
- }
-
- int main()
- {
- char *p = strdup_erro("hello");
- /*由于strdup_erro分配的空间在栈里,所以当函数返回时,栈里分配的内存被自动回收了 */
- /* 所以, 上面的函数产生不可遇知的错误 */
- return 0;
- }
作者: zhangsuozhu 发布时间: 2010-07-28
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28