Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192071
  • 博文数量: 40
  • 博客积分: 2265
  • 博客等级: 大尉
  • 技术积分: 434
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-23 17:01
文章分类

全部博文(40)

文章存档

2014年(1)

2013年(2)

2012年(6)

2011年(5)

2010年(26)

我的朋友

分类: C/C++

2010-10-15 15:19:32

#include
#include
#include
int main(void)
{
    char *GetMemory(char *p) ;
    char *pt = (char *)malloc(100) ;
    printf("%s\n",GetMemory(pt)) ;
    free(pt) ;
    pt = NULL ;
    return 0 ;
}

char *GetMemory(char *p)
{   assert(p != NULL) ;
    printf("p=%p\n" , p) ;
    int i ;
    int k ;
    char str[] = "hello world!" ;
    char *address = p ;
    k=(sizeof str)/sizeof(char) ;
    for (i=0;i        *p++ = str[i];
    return address;
}
分析:
    执行函数时,函数内部局部变量的存储单元在栈上创建。结束后被释放.
    return语句不要返回指向栈内存的指针,因为内存在函数体结束时被销毁。GetMemory中的address指针地址=main函数中的指针地址。所以return指针所指向的内存的生命周期为整个函数的运行时间。数组要么在静态存储创建,要么在栈上创建,数组名对应着(而不是指着)一块内存。上例中的str数组存活在GetMemory被调用的周期中。
    利用malloc分配内存后一定要free掉,并且将malloc返回的指针置为NULL,不然将会产生野指针。
    assert是仅在DEBUG版本起作用的宏,用于检查不应该发生的情况。当不可能发生的情况发生了,则结束程序。
阅读(568) | 评论(1) | 转发(0) |
0

上一篇:C数组和指针

下一篇:Eat memory

给主人留下些什么吧!~~

chinaunix网友2010-10-15 17:52:12

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com