realloc():无效的指针异常终止(核心已转储)

时间:2019-02-28 08:59:07

标签: c memory realloc coredump

我正在创建一个类似于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));
} 

我在char userIn中从用户那里得到输入,并且分配正确。然后,我使用strsep解析输入,从而分别获取每个参数。我可以得到ls参数和-l参数,但是当它在-l之后进行重新分配时,它会给我“ realloc():无效指针”错误。我迷失了为什么在获取ls参数后第一次可以使用它,但是在获取-l参数后失败了。有什么建议吗?

1 个答案:

答案 0 :(得分:5)

问题是您用ret返回值覆盖了strsep

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

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


来自realloc man page

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

ptr必须已由先前对malloc(),calloc()的调用返回了   或realloc()。