2012-11-08 14 views
5

Eventuali duplicati:
Do I cast the result of malloc?è necessario digitare pressofuso malloc e calloc

ero googling per scoprire il motivo per il tipo-casting di malloc e calloc. Ma ho trovato solo type-casting di malloc non è necessario dal momento che restituisce il puntatore void ma, che dire di calloc. Questa è la stessa ragione per calloc troppo ???

Ora, se ci spostiamo di nuovo al primo punto, circa il valore di ritorno di malloc e calloc. Poi, ho trovato che, entrambi stanno restituendo gli spazi assegnati. Quindi, sono un po 'confuso qui. Quindi, le mie domande sono

  1. Qual è il valore di ritorno di malloc e calloc

  2. E 'necessario digitare pressofuso malloc e calloc. E perché ?

+0

@hmjd potrebbe essere .. ma qui sto chiedendo sia per 'malloc' che per' calloc'. – Ravi

+0

Sì, questo è un duplicato, ma i compilatori stanno diventando sempre più incerti nel richiedere che tu lanci il puntatore del vuoto a qualsiasi altro tipo - che vola di fronte allo scopo originale di un puntatore vuoto, cioè era un tipo universale che poteva essere cast e assegnato a qualsiasi cosa. Questo è più C "progresso". – user2548100

risposta

7

Qual è il valore di ritorno di malloc e calloc?

È un puntatore a void (void*).

E 'necessario digitare malloc e calloc. E perché ?

No, perché la conversione da un puntatore a void in un puntatore all'oggetto è implicita.

C11 (n1570), § 6.3.2.3 puntatori
Un puntatore void può essere convertito o da un puntatore a qualsiasi tipo di oggetto.

È giusto per entrambi malloc e calloc.

+1

+1 per il riferimento – CCoder

1

Qual è il valore di ritorno di malloc() e calloc()?

void *malloc(size_t size); 
void *calloc(size_t nmemb, size_t size); 

void* viene restituito da entrambe le funzioni.

E 'necessario digitare malloc e calloc. E perché ?

No. Non è necessario digitare. Le funzioni malloc() e calloc() restituiscono un puntatore alla memoria allocata che è adeguatamente allineata per qualsiasi tipo di variabile. In caso di errore, queste funzioni restituiscono NULL. NULL può anche essere restituito con una chiamata riuscita a malloc() con una dimensione pari a zero o con una chiamata riuscita a calloc() con nmemb o una dimensione uguale a zero.

2

malloc() o calloc() rendimenti void * che possono essere assegnati a qualsiasi tipo di puntatore .In C non è necessario typecast il void* dal momento che è implicitamente fatto da compiler.But in C++ che vi darà errore se non si typecast

1

Il valore restituito di malloc e calloc è un void*. L'indirizzo dello spazio di memoria heap assegnato da queste funzioni.

Entrambe le funzioni assegnano memoria. L'unica differenza tra loro è che

  • malloc semplicemente alloca la memoria.
  • calloc alloca la memoria e inizializza a 0.

In C sua raccomandato di esprimere il valore di ritorno di queste funzioni.

In C++ è obbligatorio eseguire il cast.