您的位置:首页 > 编程语言 > C语言/C++

黑马程序员--c语言动态内存分配

2015-06-27 13:05 393 查看
动态内存分配 (malloc)

函数原型:

void *malloc (size_t size)

size_t是无符号的长整形

动态内存在堆段

返回值void*表示泛型指针,可以赋给任意一个类型的指针变量

函数类型存储在栈段

eg:

char *p = malloc(1000);

p 是这一千个字节的首地址

p+1是第2个字节的地址

定义后可以使用他的每一个空间

int *q = malloc(1000);

q[0]是前4个字节,使用q可以4字节4字节的访问空间

堆空间的分配有可能失败

char *p = malloc(1000);

if (!p)

{

perror("malloc");

exit(-1);

}//exit 表示将当前进程终止 return表示将当前函数终止 不管在main函数还是其他函数,用到exit程序会终止

使用完毕,要释放

free(p);

内容并没有改变,只是权限释放掉

开辟堆空间,告诉系统这块空间已被占用

栈空间是静态内存分配,编译时就已经决定了,main开辟空间根据声明的变量决定,不会在改变

堆空间是动态内存分配,是在运行的时候决定的

数组的大小占用的空间在编译代码的时候就已经决定了,属于静态内存分配

动态内存分配

大小运行时决定

程序员分配

堆段

手动释放

静态

大小编译时决定

编译器分配

栈段 数据段 只读数据段

自动释放
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: