我遇到以下代码时遇到问题,它通过分配更多空间将char *附加到char **。
size_t appendToken(char *tokens[], char *token, size_t size, size_t cap)
{
if(size>=cap)
{
cap+=512;
tokens = realloc(tokens, cap*sizeof(char *));
}
tokens[size] = token;
return cap;
}
执行此代码时,我遇到分段错误,size = cap(如果有剩余容量,则表现如预期)。我已经跟踪了其他所有内容,而且一切都符合预期。这里是如何启动令牌和令牌:
size_t tokenCount=0, tokens_cap = 5;
char **tokens = malloc(tokens_cap*sizeof(char *));
size_t size = 0;
size_t capacity = 4;
char *token = malloc(capacity*sizeof(char));
以下是函数的调用方式:
token_cap = appendToken(tokens, token, tokenCount++, token_cap);
我非常感谢你的帮助。
答案 0 :(得分:1)
tokens
参数
size_t appendToken(char ***tokens, char *token, size_t size, size_t cap)
{
if(size>=cap)
{
cap+=512;
*tokens = realloc(*tokens, cap*sizeof(char *));
}
(*tokens)[size] = token;
return cap;
}
否则,外部代码将访问以前分配的,现在已释放的内存。
然后您将其称为
token_cap = appendToken(&tokens, token, tokenCount++, token_cap);