realloc():无效指针已中止(核心转储)

epa*_*dge 2 c memory coredump realloc

我正在创建一个类似于bash的shell.尝试获取与命令关联的参数(即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));
} 
Run Code Online (Sandbox Code Playgroud)

我从char userIn中获取用户的输入并正确分配.然后我使用strsep单独获取每个参数来解析输入.我可以得到ls参数和-l参数,但是当它在-l之后转到realloc时它会给我"realloc():无效指针"错误.我迷失了为什么这会在获得ls参数后第一次工作但在获得-l参数后失败.有什么建议?

kir*_*dar 5

问题是要覆盖retstrsep返回值.

while((ret = strsep(&userInCopy, " "))) //Here
Run Code Online (Sandbox Code Playgroud)

有另一个临时变量来存储strsep返回.


realloc手册页.

void *realloc(void *ptr, size_t size);
Run Code Online (Sandbox Code Playgroud)

ptr 必须由之前调用malloc(),calloc()或realloc()返回.