double *p;
p = malloc(sizeof(p));
if (p != NULL)
{
*p = 5.15;
}
由于某种原因,p = malloc(sizeof(p));
不起作用。我试图分配尽可能多的内存作为p
需要。那有什么问题?malloc()双指针
double *p;
p = malloc(sizeof(p));
if (p != NULL)
{
*p = 5.15;
}
由于某种原因,p = malloc(sizeof(p));
不起作用。我试图分配尽可能多的内存作为p
需要。那有什么问题?malloc()双指针
I try to allocate as much memory as
p
needs.
p
本身(作为变量)已经拿到了(自己的)的内存分配,你想基本上是分配为其p
将指向内存什么。
这里,p
指向一个double
,所以它需要有一个内存区域能够存储一个double
值。因此,分配应该等于一个double
的大小,即
p = malloc(sizeof*p);
的malloc返回void *的,所以你需要提供类型转换
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));'起作用,它分配一个指针的大小。 –