14.1 内存类型
14.2 malloc()调用
#include<stdlib.h>
...
void *malloc(size_t size);
实际上甚至不需要包含头文件stdlib.h,因为C库是C程序默认链接的
对malloc的调用使用sizeof()操作符去申请正确大小的空间,在C中它被认为是编译时操作符,不同于函数调用(函数调用时在运行时发生的)
14.4 常见错误
- 忘记分配内存
可以这么操作:
char *src = "hello";
char *dst= (char*) malloc(strlen(src)+1);
strcpy(dst,src);
- 没有分配足够的内存
char *src = "hello";
char *dst= (char*) malloc(strlen(src)); //too small
strcpy(dst,src);
对于字符串,一般需要申请strlen()+1的大小
操作系统会在程序结束时收回进程的所有内存状态(包括用于代码、栈,以及相关堆的内存页)
14.6 其他调用
- calloc()分配内存,并在返回之前将其置零(即初始化了)
- realloc()创建一个新的更大的内存区域,将旧区域复制到其中,并返回新区域的指针