【发布时间】:2023-03-12 18:57:01
【问题描述】:
我无法弄清楚这里到底发生了什么。我期望的是输出应该说键中只有1个元素,当我只分配120字节的0位置时说有7个。
void add2(char **b, char *i) {
if (!i) {
b[0] = (char*) malloc(120);
sprintf(b[0], "%s", "hithere");
} else {
strcat(b[0], "\\\\");
strcat(b[0], i);
}
}
void add1(char **b) {
add2(b, NULL);
add2(b, "one");
add2(b, "two");
add2(b, "three");
}
void add() {
char *keys[2];
int i;
add1(keys);
fprintf(stderr, "%s\n", keys[0]);
for (i = 0; keys[i]; i++)
fprintf(stderr, "%d\n", i);
free(keys[0]);
}
int main (int argc, char** argv)
{
add();
add();
return 255;
}
输出: 那里\一\二\三 0 1 2 3 4 5 6 7 那里\一\二\三 0 1 2 3 4 5 6 7
字符串与我预期的一样,但是我认为之后应该只打印 0,因为 0 是我添加的唯一元素。我需要能够释放每个位置,而不仅仅是 free[0],但是当我将 free[i] 放在打印出 i 的 for 循环中时,它会堆栈转储。
关于下面响应的初始化,如果我需要一个类似于 1000 而不是 2 的数组,那么如何在不输入 1,000 个 0 的情况下将它们全部初始化为 0
【问题讨论】: