realloc (): неверный указатель прерван (ядро сброшено) - PullRequest
0 голосов
/ 28 февраля 2019

Я работаю над созданием оболочки, похожей на bash.Я сталкиваюсь с ошибкой при попытке получить аргументы, связанные с командой (т.е. ls -l).Я искал в Интернете и не нашел ничего полезного.

char *userInCopy;
char *ret;
userInCopy = (char*)calloc(1024, sizeof(char));
ret = (char*)calloc(64, sizeof(char));
strcpy(userInCopy, userIn);
int i = 0;
while((ret = strsep(&userInCopy, " "))){
    *(args + i) = (char*)calloc(strlen(ret), sizeof(char));
    strcpy((*(args+i)), ret);
    i++;
    ret = (char*) realloc(ret, (64)* sizeof(char));
} 

Я получаю информацию от пользователя в char userIn, и она распределяется правильно.Затем я анализирую ввод, используя strsep, получая каждый аргумент отдельно.Я могу получить аргумент ls и -l, но затем, когда он переходит в realloc после -l, он выдает ошибку «realloc (): неверный указатель».Я забыл, почему это сработает в первый раз после получения аргумента ls, но не получится после получения аргумента -lЕсть предложения?

1 Ответ

0 голосов
/ 28 февраля 2019

Проблема в том, что вы перезаписываете ret возвращаемым значением strsep.

while((ret = strsep(&userInCopy, " "))) //Here

Есть еще одна временная переменная для хранения strsep возврата.


С справочной страницы realloc .

void *realloc(void *ptr, size_t size);

ptr должно быть возвращено более ранним вызовом malloc (), calloc () или realloc ().

...