Вы можете использовать realloc
, чтобы изменить размер выделенного блока памяти:
int i = 0;
int len = 10;
char **mountslist = malloc(len * sizeof(char *));
while ((ent = getmntent(mounts)) != NULL) {
if (i >= len) {
len *= 2;
char **tmp = realloc(mountslist, len * sizeof(char *));
if (tmp) {
mountslist = tmp;
}
}
mountslist[i] = strdup(ent->mnt_dir);
i++;
}
Как показано выше, хорошим правилом является удвоение количества пространства, которое вы выделяете, когда у вас заканчивается пространство. Это предотвращает чрезмерные вызовы realloc
, которые могут перемещать выделенную память каждый раз.