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

По какой-то причине p = malloc(sizeof(p)); не работает. Я стараюсь выделить столько памяти, сколько нужно p. Что не так с этим?malloc() on double pointer

+1

Вы хотите выделить столько памяти, сколько требуется на что указывает 'p'. Итак, 'malloc (sizeof (* p));' – StoryTeller

+0

«Я пытаюсь выделить столько памяти, сколько нужно« p ».« Почему вы так хотите сделать? Ожидается, что 'p' будет указывать данные с типом' double', поэтому размер буфера должен быть 'sizeof (double)' или 'sizeof (* p)'. – MikeCAT

+1

Фактически 'p = malloc (sizeof (p));' works, он выделяет размер указателя. –

ответ

4

I try to allocate as much memory as p needs.

сам по себе (как переменная) взяла (собственная) память, выделенную p, что вы пытаетесь в основном выделить память для которой p будет указывать.

Здесь p указывает на double, поэтому для хранения значения double необходимо иметь область памяти. Таким образом, распределение должно быть равно размеру double, т.е.

p = malloc(sizeof*p); 
0

таНос возврата недействительным *, так что вам нужно, чтобы обеспечить преобразование типа

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

[Нет, у вас нет] (http://stackoverflow.com/a/605858/817643) – StoryTeller

+0

Почему? Если этого не произойдет, вы получите сообщение об ошибке: «Невозможно преобразовать из« void * »в« double * ». – Hakob

+1

Вы компилируете компилятор C++, чем. Один язык имеет неявное преобразование указателя из 'void *', а другое - нет. – StoryTeller