7.1 为什么这段代码不起作用?
char *answer; printf("Type something:\n"); gets(answer); printf("You typed \"%s\"\n", answer);
7.2 我无法获取strcat工作。我试过
char *s1 = "Hello, "; char *s2 = "world!"; char *s3 = strcat(s1, s2);但我得到了奇怪的结果。
7.3 但是手册页显示strcat说它接受两个char *作为参数。我应该如何知道分配内存?
7.3b 我刚试了这段代码
char *p; strcpy(p, "abc");它居然能运行。怎么回事?为什么没有崩溃?
7.3c 指针变量分配多少内存?
7.4 我正在用这段代码从文件中读取行到数组中
char linebuf[80]; char *lines[100]; int i; for(i = 0; i < 100; i++) { char *p = fgets(linebuf, 80, fp); if(p == NULL) break; lines[i] = p; }为什么所有行最终都包含最后一行副本?
7.5a 我有一个函数本应返回一个字符串,但是当它返回给调用者时,返回的字符串是乱码。
7.5b 那么返回字符串或其他聚合体的正确方法是什么?
7.6 为什么我对调用malloc?
7.7 为什么有些代码仔细地转换了malloc返回的值转换为正在分配的指针类型?
7.7b 转换malloc的返回值有什么问题?
7.7c 在调用malloc时,像“无法将 `void *' 转换为 `int *''' 这样的错误是什么意思?
7.8 我看到类似这样的代码
char *p = malloc(strlen(s) + 1); strcpy(p, s);难道不应该是malloc((strlen(s) + 1) * sizeof(char))?
7.9 我写了一个小的包装函数围绕着malloc,但它不工作
#include <stdio.h> #include <stdlib.h> mymalloc(void *retp, size_t size) { retp = malloc(size); if(retp == NULL) { fprintf(stderr, "out of memory\n"); exit(EXIT_FAILURE); } }
7.10 我正在尝试声明一个指针并为其分配一些空间,但是它不起作用。这段代码有什么问题?
char *p; *p = malloc(10);
7.10a 这个初始化有什么问题?
char *p = malloc(10);我的编译器抱怨“无效的初始化列表”或类似的消息。
7.10b 如何关闭那个“警告:可能的指针对齐问题”的消息,这是lint在每次调用malloc?
7.11 如何动态分配数组?
7.12 如何得知有多少可用内存?
7.13 应该应该做什么?返回一个空指针还是指向 0 字节的指针?
7.14 我听说有些操作系统实际上并不分配malloc分配的内存,直到程序试图使用它。这合法吗?
7.15 malloc返回了奇怪的指针值,但我确实读了问题 7.6,并且我包含了这一行
extern void *malloc();在我调用它之前。
7.16 我正在为一些数值工作分配一个大数组,使用了这行代码
double *array = malloc(300 * 300 * sizeof(double));malloc没有返回 null,但程序行为异常,就好像它覆盖了内存,或者malloc没有分配我要求的那么多,或者诸如此类的。
7.17 我的 PC 有 8MB 内存。为什么我似乎只能malloc640K 左右?
7.18 我的应用程序高度依赖于数据结构的节点动态分配,并且malloc/free的开销正成为瓶颈。我该怎么办?
7.19 我的程序正在崩溃,似乎在某个地方向下进入malloc内部,但我看不出有什么不对。是malloc?
我正在动态分配一个数组,像这样
int *iarray = (int *)malloc(nints);malloc没有返回 NULL,但代码不起作用。
7.20 你不能在使用已释放的动态分配内存,对吧?
7.21 为什么调用free?
释放指针后使用(赋值、比较)指针值有多不安全?
7.22 当我调用malloc为一个函数中的局部指针分配内存时,我是否必须显式地free它?
7.23 我正在分配包含指向其他动态分配对象的指针的结构。当我释放一个结构时,是否也必须释放每个附属指针?
7.24 在程序退出前我必须释放分配的内存吗?
7.25 我有一个程序,它malloc了很多内存,之后又free了很多内存,但从操作系统上看,内存使用量并没有真正减少。
7.26 知道需要释放多少字节?free如何知道需要释放多少字节?
7.27 那么我能否查询 malloc 包以了解已分配块的大小?
7.28 为什么sizeof能否告诉我一个指针指向的内存块的大小?
7.29 动态分配了一个数组(如问题 6.14 中所述)后,我能改变它的大小吗?
7.30 将 null 指针作为第一个参数传递给realloc是否合法?为什么会有人这样做?
7.31 之间的区别是什么?calloc和malloc?我应该使用哪个?利用calloc的零填充是否安全?free是否适用于用calloc分配的内存,还是需要cfree?
7.32 是什么?alloca为什么不推荐使用它?