double *p;
p = malloc(sizeof(p));
if (p != NULL)
{
*p = 5.15;
}
По какой-то причине p = malloc(sizeof(p));
не работает. Я стараюсь выделить столько памяти, сколько нужно p
. Что не так с этим?malloc() on double pointer
double *p;
p = malloc(sizeof(p));
if (p != NULL)
{
*p = 5.15;
}
По какой-то причине p = malloc(sizeof(p));
не работает. Я стараюсь выделить столько памяти, сколько нужно p
. Что не так с этим?malloc() on double pointer
I try to allocate as much memory as
p
needs.
сам по себе (как переменная) взяла (собственная) память, выделенную p
, что вы пытаетесь в основном выделить память для которой p
будет указывать.
Здесь p
указывает на double
, поэтому для хранения значения double
необходимо иметь область памяти. Таким образом, распределение должно быть равно размеру double
, т.е.
p = malloc(sizeof*p);
таНос возврата недействительным *, так что вам нужно, чтобы обеспечить преобразование типа
double *p;
p = (double *)malloc(sizeof(double));
if (p != NULL)
{
*p = 5.15;
}
[Нет, у вас нет] (http://stackoverflow.com/a/605858/817643) – StoryTeller
Почему? Если этого не произойдет, вы получите сообщение об ошибке: «Невозможно преобразовать из« void * »в« double * ». – Hakob
Вы компилируете компилятор C++, чем. Один язык имеет неявное преобразование указателя из 'void *', а другое - нет. – StoryTeller
Вы хотите выделить столько памяти, сколько требуется на что указывает 'p'. Итак, 'malloc (sizeof (* p));' – StoryTeller
«Я пытаюсь выделить столько памяти, сколько нужно« p ».« Почему вы так хотите сделать? Ожидается, что 'p' будет указывать данные с типом' double', поэтому размер буфера должен быть 'sizeof (double)' или 'sizeof (* p)'. – MikeCAT
Фактически 'p = malloc (sizeof (p));' works, он выделяет размер указателя. –