14.1 内存类型

14.2 malloc()调用

  1. #include<stdlib.h>
  2. ...
  3. void *malloc(size_t size);

实际上甚至不需要包含头文件stdlib.h,因为C库是C程序默认链接的

对malloc的调用使用sizeof()操作符去申请正确大小的空间,在C中它被认为是编译时操作符,不同于函数调用(函数调用时在运行时发生的)

14.4 常见错误

  • 忘记分配内存

可以这么操作:

  1. char *src = "hello";
  2. char *dst= (char*) malloc(strlen(src)+1);
  3. strcpy(dst,src);
  • 没有分配足够的内存
    1. char *src = "hello";
    2. char *dst= (char*) malloc(strlen(src)); //too small
    3. strcpy(dst,src);

对于字符串,一般需要申请strlen()+1的大小


操作系统会在程序结束时收回进程的所有内存状态(包括用于代码、栈,以及相关堆的内存页)

14.6 其他调用

  • calloc()分配内存,并在返回之前将其置零(即初始化了)
  • realloc()创建一个新的更大的内存区域,将旧区域复制到其中,并返回新区域的指针