+ -
当前位置:首页 → 问答吧 → 菜鸟问结构体指针分配的问题

菜鸟问结构体指针分配的问题

时间:2010-07-28

来源:互联网

A方法:
struct T t;
Struct *T pt = &t;
B方法
Struct *T pt = (T*)malloc(sizeof(T));

A和B是不是最后的结果都一样?

作者: 莫良23   发布时间: 2010-07-28

A方法在栈上分配空间
B方法在堆上分配空间

作者: 聪聪知不道   发布时间: 2010-07-28

请问有什么区别,谢谢

作者: 莫良23   发布时间: 2010-07-28

B方法得free吧

作者: zhangsuozhu   发布时间: 2010-07-28

http://zhidao.baidu.com/question/6117772.html

栈里分配的内存只在本函数中有效。出来该函数,分配的空间就收回了。 堆则不然。但堆分配了的空间需手动释放。程序中不会自动回收该空间。除非程序退出,由操作系统回收整个进程占用的内存空间。(有些操作系统可能进程退出都不回收)

例如一个错误的用法:
  1. char *strdup_erro(char *str)
  2. {
  3.     char buf[512] = {0};
  4.     strncpy(buf, str, sizeof(buf);
  5.     return buf;
  6. }

  7. int main()
  8. {
  9.     char *p = strdup_erro("hello");  
  10.     /*由于strdup_erro分配的空间在栈里,所以当函数返回时,栈里分配的内存被自动回收了 */
  11.     /* 所以, 上面的函数产生不可遇知的错误 */
  12.     return 0;
  13. }
复制代码

作者: zhangsuozhu   发布时间: 2010-07-28

相关阅读 更多

热门下载

更多