文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>指针与内存分配

指针与内存分配

时间:2010-10-15  来源:libin1201119

#include <stdio.h>
#include <malloc.h>
#include <assert.h>
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<k;i++)
        *p++ = str[i];
    return address;
}
分析:
    执行函数时,函数内部局部变量的存储单元在栈上创建。结束后被释放.
    return语句不要返回指向栈内存的指针,因为内存在函数体结束时被销毁。GetMemory中的address指针地址=main函数中的指针地址。所以return指针所指向的内存的生命周期为整个函数的运行时间。数组要么在静态存储创建,要么在栈上创建,数组名对应着(而不是指着)一块内存。上例中的str数组存活在GetMemory被调用的周期中。
    利用malloc分配内存后一定要free掉,并且将malloc返回的指针置为NULL,不然将会产生野指针。
    assert是仅在DEBUG版本起作用的宏,用于检查不应该发生的情况。当不可能发生的情况发生了,则结束程序。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载