2016-03-03 1 views
1
double *p; 
p = malloc(sizeof(p)); 
if (p != NULL) 
{ 
    *p = 5.15; 
} 

Pour une raison quelconque, p = malloc(sizeof(p)); ne fonctionne pas. J'essaie d'allouer autant de mémoire que les besoins p. Quel est le problème avec ça?malloc() sur double pointeur

+1

Vous souhaitez allouer autant de mémoire que nécessaire par ce que 'p' pointe vers. Donc 'malloc (sizeof (* p));' – StoryTeller

+0

"J'essaie d'allouer autant de mémoire que' p'. "Pourquoi diable voulez-vous faire une telle chose? On s'attend à ce que 'p' pointe sur des données de type' double', donc la taille du tampon devrait être 'sizeof (double)' ou 'sizeof (* p)'. – MikeCAT

+1

En fait 'p = malloc (sizeof (p));' fonctionne, il alloue la taille d'un pointeur. –

Répondre

4

I try to allocate as much memory as p needs.

p lui-même (comme une variable) a obtenu le (propre) mémoire allouée, ce que vous essayez est essentiellement allouer la mémoire pour laquelle p sera pointe.

Ici, p pointe vers un double, il doit donc avoir une zone de mémoire pour pouvoir stocker une valeur double. Ainsi, l'allocation doit être égale à la taille d'un double, à savoir,

p = malloc(sizeof*p); 
0

malloc retour void *, vous devez fournir une conversion de type

double *p; 
p = (double *)malloc(sizeof(double)); 
if (p != NULL) 
{ 
    *p = 5.15; 
} 
+1

[Non vous n'avez pas] (http://stackoverflow.com/a/605858/817643) – StoryTeller

+0

Pourquoi? Si ce n'est pas le cas, vous obtiendrez une erreur: "Impossible de convertir" void * "en" double * ". – Hakob

+1

Vous compilez avec un compilateur c + +. Une langue a une conversion de pointeur implicite de 'void *' et l'autre pas. – StoryTeller