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