в этой части моей программы я пытаюсь имитировать операцию CDUP на FTP-серверах. Сначала я получаю текущий каталог, в котором находится клиент (ptr2
и buf3
), а затем пытаюсь удалить последнюю строку, отделенную /
, чтобы определить, каким будет путь, если мы перейдем в каталог. Однако я получаю ошибку realloc только тогда, когда захожу в другой каталог, возвращаюсь и пытаюсь снова выполнить CDUP (т. Е. Идти вверх из корневого каталога)
char *ptr2;
char buf3[255];
// Get current directory of application, store in buf3
if ((ptr2 = getcwd(buf3, sizeof(buf3))) != NULL) {
printf("Current working dir CDUP: %s\n", buf3);
} else {
perror("getcwd() error");
}
// Strip current directory off buf3
char *cdupSplit = strtok(buf3, "/");
char *cdupAccumulator = NULL;
char *newStr = calloc(1, strlen(cdupSplit));
while (cdupSplit != NULL) {
if (cdupAccumulator != NULL) {
newStr = realloc(newStr, strlen("/"));
newStr = realloc(newStr, strlen(cdupAccumulator));
strcat(newStr, "/");
strcat(newStr, cdupAccumulator);
}
cdupAccumulator = cdupSplit;
cdupSplit = strtok(NULL, "/");
}
...
free(newStr);
Ошибка говорит realloc(): invalid next size: 0x0000000001ac0a20 ***
Я не уверен, в чем дело, поскольку я освобождаю переменную newStr
, и она не передается в следующий выпуск команды.