Я не могу понять, какого чёрта здесь происходит. Я ожидаю, что в выводе должно быть сказано, что в ключах есть только 1 элемент, то есть 7, когда я выделил только позицию 0 с 120 байтами.
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;
}
выходы:
hithere \ один \ два \ три
0
1
2
3
4
5
6
7
hithere \ один \ два \ три
0
1
2
3
4
5
6
7
строки такие, как я и ожидал, однако я думал, что только 0 должно быть распечатано, так как 0 - единственный элемент, к которому я добавил. Мне нужно иметь возможность освобождать каждое пятно вместо просто free [0], но когда я помещаю free [i] в цикл for, который выводит его, он складывает дампы.
в отношении инициализации из ответа ниже, если мне нужен массив, подобный 1000 вместо 2, то как мне инициализировать их все в 0 без ввода 1000 0