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
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
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!
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.
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
Penso che sia abbastanza chiaro di cosa ha bisogno l'OP qui. –
In C '(int (*))' deve essere evitato. Si suggerisce di non trasmettere il valore restituito di 'malloc'. –
oh wow non più errori di compilazione, grazie – titus
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) –