2012-02-17 16 views
5
int (*p)[2]; 
p=(int(*))malloc(sizeof(int[2])*100); 

Qual è il modo corretto per malloc un puntatore a un array? Non riesco a capire la parte con (int (*))malloc pointer to array

+2

In C '(int (*))' deve essere evitato. Si suggerisce di non trasmettere il valore restituito di 'malloc'. –

+0

oh wow non più errori di compilazione, grazie – titus

+1

E se davvero vuoi davvero eseguire il cast, dovrebbe essere '(int (*) [2])'. '(int (*))' è 'int *'. La dimensione passata a 'malloc' sembra corretta (allocando le dimensioni per 100 puntatori a array di 2 pollici) –

risposta

8

commenti inviare messaggi come risposta:
In C non si deve gettare il valore di ritorno di malloc. Si prega di fare riferimento a this post su SO per ulteriori informazioni sul motivo per cui il valore di ritorno di typecasting di malloc non è una buona idea in C. E se per qualche ragione hai davvero voglia di lanciare, dovrebbe essere (int(*)[2]). (int(*)) è int *. La dimensione passata a malloc sembra soddisfacente (allocando le dimensioni per 100 puntatori a un array di 2 pollici). Quindi dovresti fare

int (*p)[2]; 
p=malloc(sizeof(int[2])*100); 

Spero che questo aiuti!

-1

Non è chiaro cosa vuoi qui. Se vuoi 100 coppie int, ad esempio, disposte come una matrice di puntatori a int (dove ogni puntatore punta esattamente a due inte), allora devi chiamare malloc 100 volte su 100 puntatori a int, allocando due numeri interi ogni volta.

Non ha senso "malloc un puntatore a un array". Puoi mallocare un array e assegnarlo a un puntatore, oppure puoi mallocare una serie di puntatori. Ma quello che hai chiesto non è chiaro.

+1

ok, ma cosa succede se non so che ho bisogno di 100 puntatori in fase di esecuzione? cosa succede se ho bisogno di 10000? Penso che lo stia facendo bene – titus

+2

Penso che sia abbastanza chiaro di cosa ha bisogno l'OP qui. –