[英]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.