1

我在使用以下代码时遇到问题,该代码通过分配更多空间将 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);

我非常感谢一些帮助。

4

1 回答 1

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);
于 2013-04-07T23:32:11.770 回答