我有一個專案要做,我需要為陣列重新分配記憶體。我嘗試了很多次,但我發現只有一個版本有效。
void resize(int* size, char*** arr)
{
*size *= 2;
*arr = realloc(*arr, sizeof(char*) * *size);
nulltest(*arr); // This checks if the allocation was successful
}
resize(&size, &arr);
這個函式把陣列的容量加倍,但是我覺得做的太復雜了,所以想請教一下各位,能不能簡化一下。我也樂于接受新的解決方案。
uj5u.com熱心網友回復:
int不是尺寸的好型別。使用正確的size_t- 盡量避免沒有特殊需要的副作用(即修改通過參考傳遞的物件)。
- 您的代碼可能會泄漏記憶體。如果
realloc失敗,您將失去對先前分配的記憶體的參考。參考的整數size也無需更改即可。
我會這樣實作:
char **resize(char **arr, size_t newsize)
{
return realloc(arr, size * sizeof(*arr));
}
呼叫者函式應該檢查錯誤。
但是定義這個函式有什么意義呢?這個只回傳 的回傳值realloc。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/363239.html
上一篇:為什么十進制整數常量是有符號的,而十六進制對應的常量既可以是有符號的也可以是無符號的,即使它們指的是同一組值?
下一篇:無效的初始值設定項是什么意思?
