簡體   English   中英

C將char *附加到char **來重新分配分段錯誤

[英]C realloc segmentation fault with appending char * to char **

我在使用以下代碼時遇到麻煩,該代碼通過分配更多空間將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);

非常感謝您的幫助。

您需要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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM