Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
questa va a buon fine , quindi dovrebbe allocare spazio per un "vettore" di puntatori ad int , il problema si presenta quando voglio allocare spazio a ciascun puntatore:
Se a->m è l'indirizzo iniziale del vettore di puntatori a int .... allora *(a->m) è il primo elemento del vettore, *(a->(m+1)) è il secondo elemento, *(a->(m+2)) è il terzo elemento e così via.
phobos3576 ha scritto:...
malloc restituisce (void *), per cui il programmatore deve chiedere la conversione al tipo desiderato.
Mha, void è un tipo generico, quindi non bisogna chiedere niente , basta che lo usi per come lo hai allocato, quel sizeof(int) basta IMHO. Tanto è vero che il compilatore non genera né warning, né error. Poi, se fosse così, perchè alla prima malloc non è stato usato nessun casting?
Forse è solo una diversa scuola di pensiero,
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
Non ho avuto tempo di fare ricerche approfondite, comunque vi riporto il primo risultato trovato: http://faq.cprogramming.com/cgi-bin/sma ... 1047673478
E' consigliato di non fare il cast perchè altrimenti si rischierebbe di avere un bug nel caso in cui il tipo del puntatore venisse modificato. Nel link c'è anche un consiglio su come usare sizeof (dereferenziando il puntatore piuttosto che applicando il sizeof al tipo di dato).
You can store the result of malloc into any pointer variable without a cast, because ISO C automatically converts the type void * to another type of pointer when necessary. But the cast is necessary in contexts other than assignment operators or if you might want your code to run in traditional C.
che differenza c'è tra C tradizionale, ansi C e ISO C?