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

由于某种原因,p = malloc(sizeof(p));不起作用。我试图分配尽可能多的内存作为p需要。那有什么问题?malloc()双指针

+1

你想分配尽可能多的内存要求通过'p'指向什么。所以'malloc(sizeof(* p));' – StoryTeller

+0

“我试图分配尽可能多的内存作为'p'需要。”你为什么要做这样的事情?预计'p'将指向具有'double'类型的数据,所以缓冲区的大小应该是'sizeof(double)'或'sizeof(* p)'。 – MikeCAT

+1

其实'p = malloc(sizeof(p));'起作用,它分配一个指针的大小。 –

回答

4

I try to allocate as much memory as p needs.

p本身(作为变量)已经拿到了(自己的)的内存分配,你想基本上是分配为其p将指向内存什么。

这里,p指向一个double,所以它需要有一个内存区域能够存储一个double值。因此,分配应该等于一个double的大小,即

p = malloc(sizeof*p); 
0

的malloc返回void *的,所以你需要提供类型转换

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