8. 内存分配
- 8.1 为什么这段代码不行?char *answer;
printf("Type something:\n");
gets(answer);
printf("You typed
\"%s\"\n",
answer);
- 8.2 我的 strcat() 不行.我试了
char *s1 = "Hello, "; char *s2 =
"world!"; char *s3 = strcat(s1, s2);
但是我得到了奇怪的结果。
- 8.3 但是 strcat 的手册页说它接受两个 char * 型参数。
我怎么知道 (空间) 分配的事情呢?
- 8.4 我刚才试了这样的代码
char *p;
strcpy(p, "abc"); 而它运行正常?怎么回事?
为什么它没有崩溃?
- 8.5 一个指针变量分配多少内存?
- 8.6 我有个函数, 本该返回一个字符串, 但当它返回调用者的时候,
返回串却是垃圾信息。
- 8.7 那么返回字符串或其它集合的争取方法是什么呢?
- 8.8 为什么在调用 malloc() 时, 我得到 ``警告:
整数赋向指针需要类型转换"?
- 8.9 为什么有些代码小心地把 malloc 返回的值转换为分配的指针类型。
- 8.10 在调用 malloc() 的时候, 错误 ``不能把 void * 转换为 int *"
是什么意思?
- 8.11 我见到了这样的代码
char *p = malloc(strlen(s) + 1);
strcpy(p, s);
难道不应该是 malloc((strlen(s) + 1) * sizeof(char))?
- 8.12 我如何动态分配数组?
- 8.13 我听说有的操作系统程序使用的时候才真正分配 malloc 申请
的内存。这合法吗?
- 8.14 我用一行这样的代码分配一个巨大的数组, 用于数字运算:
double *array = malloc(300 * 300 * sizeof( double ));
malloc() 并没有返回 null, 但是程序运行得有些奇怪, 好像改写了某些内存,
或者 malloc() 并没有分配我申请的那么多内存, 云云。
- 8.15 我的 PC 有 8 兆内存。为什么我只能分配 640K 左右的内存?
- 8.16 我的程序总是崩溃, 显然在 malloc 内部的某个地方。 但是我看不出
哪里有问题。是 malloc() 有 bug 吗?
- 8.17 动态分配的内存一旦释放之后你就不能再使用, 是吧?
- 8.18 为什么在调用 free() 之后指针没有变空?使用 (赋值, 比较)
释放之后的指针有多么不安全?
- 8.19 当我 malloc() 为一个函数的局部指针分配内存时, 我还需要用
free() 明确的释放吗?
- 8.20 我在分配一些结构, 它们包含指向其它动态分配的对象的指针。
我在释放结构的时候, 还需要释放每一个下级指针吗?
- 8.21 我必须在程序退出之前释放分配的所有内存吗?
- 8.22 我有个程序分配了大量的内存, 然后又释放了。但是从操作系统看,
内存的占用率却并没有回去。
- 8.23 free() 怎么知道有多少字节需要释放?
- 8.24 那么我能否查询 malloc 包, 可分配的最大块是多大?
- 8.25 向 realloc() 的第一个参数传入空指针合法吗?你为什么要这样做?
- 8.26 calloc() 和 malloc() 有什么区别?利用 calloc 的零填充功能安全吗?
free() 可以释放 calloc() 分配的内存吗, 还是需要一个 cfree()?
- 8.27 alloca() 是什么?为什么不提倡使用它?
翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)