Newsgroup: it.comp.lang.c
Titolo: malloc e cast

ma che volete dire quando dite di non fare il cast sulla malloc??
questa non è la sintassi giusta???
..
int *a;
int n;
..
a = ( int * ) malloc ( n * sizeof ( int ) );
mi scrivete la sintassi giusta?ke da quello che ho capito è
a = malloc ( n * sizeof ( int ) );
ciauz
PS: ma perchè non dovrei farlo??
GCC lo compila??

ma che volete dire quando dite di non fare il cast sulla malloc??
La conversione da puntatore void a puntatore tipizzato, in
C, e' automatica (diversamente dal C++).  Il C non possiede
un controllo forte sui tipi, il che vuol dire che l'uso di
un cast esplicito puo' mascherare quello che avviene
realmente nel codice e questo puo' essere pericoloso.
-- 
Andrea Laforgia - walkietalkie(at)
libero.it
"Meglio cieco che negro" (Stevie Wonder)

 ha scritto nel messaggio
news:3c54807c...@news.tin.it...

//quindi se dico
int *a;
// devo fare il cast nella malloc quindi
a=(int *)malloc(sizeof(int));
//se invece
void *a
// non devo farlo e quindi
a=malloc (sizeof(int));
se c'è qualcosa di sbagliato ditemelo

a=(int *)malloc(sizeof(int));
No, il cast per malloc non va MAI fatto, ne' 
per i puntatori tipizzati, ne' per quelli void.
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

 Andrea Laforgia
grazie andrea :)

 realmente nel codice e questo puo' essere pericoloso.
Quali sono i rischi concreti nell'uso del cast per la malloc? quali sono
questi pericoli?
--
Bye
Johnny
http://digilander.iol.it/Superpork

quali sono questi pericoli?
Precisiamo che stiamo parlando della malloc() cosi' come
viene usata in C (in C++ castare il valore restituito da
malloc e' d'obbligo).  In generale, il fatto che il
compilatore abbia visto il prototipo della funzione che stai
chiamando, e' garanzia del fatto che se il punto di codice
in cui la invochi passa indenne al compilatore, stai facendo
le cose per bene.


questi pericoli?
in C? la malloc()  ritorna un puntatore a void e quindi il cast è
obbligatorio
-- 
Lawrence "Rhymes" Oluyede (
rhy...@myself.com
)
"Per cambiare, per diventare un'altra
cosa dobbiamo prima sapere cosa siamo"
(Bruce Lee)

 obbligatorio
Niente affatto.
In C il cast da void* a qualsiasi altro tipo di puntatore
e' automatico.  Il cast esplicito va *SEMPRE* evitato.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

e' automatico.  Il cast esplicito va *SEMPRE* evitato.
mmm forse è perchè il mio compilatore me lo segnala che mi sono fatto
questa idea dell'obbligo :)


questa idea dell'obbligo :)
Probabilmente usi un compilatore C++.  
In C++ il cast, come gia' detto, e' d'obbligo e va usato, in
C no e va evitato.
p.s.: evita l'uso di accentate nei tuoi messaggi, non
compaiono correttamente.


C no e va evitato.
Uso il borland c++ compiler 5.5 con lo switch -A attivato :)


Uso il borland c++ compiler 5.5 con lo switch -A attivato :)
E che vuol dire -A ?


questa idea dell'obbligo :)
#include <stdlib.h>
e ti sparisce il warning
Mox 

E che vuol dire -A ?
Oops ho sbagliato compilatore :))
cmq in tutti gli utilizzi della malloc che rammento sul K&R
usa sempre il cast esplicito...


e ti sparisce il warning
non sono scemo so che la malloc è nell'header stdlib :)


 usa sempre il cast esplicito...
Il K&R II versione e' in errore.  Difatti c'e' un
errata corrige che risolve il problema.
Ti ripeto per l'ennesima volta che l'utilizzo del
cast esplicito per malloc(), in C, non e' necessario
ed e' assolutamente da evitare.


 non sono scemo so che la malloc è nell'header stdlib :)
Ti ho gia' chiesto se, per cortesia, eviti l'uso delle
accentate.


ed e' assolutamente da evitare.
Grazie per l'ennesima delucidazione :)


accentate.
Più che altro sarebbe meglio impostare iso-8859-1 (o iso-8859-15)
invece di utf-8.
-- 
Marco Barisione

invece di utf-8.
Su Usenet e' buona norma non utilizzare *mai* le accentate.


 ha scritto nel messaggio
news:3c5572c...@news.tin.it...

e se invece lo uso rischio di non vedere un errore nascosto?
Esatto.


Su Usenet e' buona norma non utilizzare *mai* le accentate.
No le cose sono cambiate, anche il GCN (coloro che gestiscono it.*)
hanno riconosciuto che si possono usare le accentate in it.* a patto
che il nesreader del postante gestisca correttamente i charset e mime,
quindi chi usa FreeAgent, XNews o Gravity non dovrebbe usare le
accentate.
Tranne in alcuni gruppi particolari i charset consigliati sono:
iso-8859-15 (come quello segunete ma con il simbolo dell'euro e altri
            poco usati in italia)
iso-8859-1  comprende accentate e altri caratteri usati nelle lingue
            dell'europa occidentale.
us-ascii    niente accentate, euro o altri simboli.
utf-8       alcuni newsreader però non lo gestiscono correttamemente,
            agent invece mi pare che lo faccia, forse il tuo è un po'
            troppo vecchiotto.
Ovviamente questo non è il newsgroup adatto in cui parlare di queste
cose, se volete ci trasferiamo in un altro gruppo.
-- 
Marco Barisione

 Esatto.
vediamo se ho capito fino in fondo....
il compilatore non si accorgerebbe dell'errore perchè c'è il cast
esplicito....
però in fase di esecuzione mi troverei con comportamenti imprevisti......
giusto?


giusto?
Lui se ne accorge, ma vedendo il cast e' convinto che TU sia conscio
di quello che fai, quindi non segnala nulla.
Mox :)

 che il nesreader del postante gestisca correttamente i charset e mime,
Io parlo di Usenet e il GCN non ha "giurisdizione" sui 
gruppi appartenenti ad altre gerarchie che non siano it.*.  
Io seguo molti ng americani ed e' buona norma non usare 
le accentate, proprio perche' non sai se chi leggera' i 
tuoi messaggi abbia o meno un newsreader predisposto.
