我有一個函數可以創建一個指針數組。分配內存的函數通過傳遞給函數的參數返回新的內存指針。它可以重現該問題的最簡單的代碼如下:實際參數指針不匹配?
void foo (void** new_mem, size_t bytes)
{
*new_mem = malloc(bytes);
}
int main (void)
{
int** ptr_arr; // Want to create an array of pointers
foo(&ptr_arr, sizeof(int*)*100); // Create an array size of 100
// compiler emits warning:
// 'void **' differs in levels of indirection from 'int ***'
return 0;
}
我能投傳給foo的像這樣的第一個參數:但是「(無效**)& ptr_arr」擺脫的警告,我想知道:是否有更合適的解決方案?
所以這聽起來像解決方案是使用一箇中間的'void *',它將包含新的內存地址,然後設置int **到中間void *。 – Andrew 2010-09-01 16:00:43
@Andrew:不,使用中間的'void *'不會奇蹟般地使轉換有效。如果在'T *'和'U *'之間轉換無效,那麼'T *'將'void *'轉換爲'U *'也是無效的;但C不會提醒你。 – 2010-09-02 08:56:39