2012-11-08 28 views
5

可能重复:
Do I cast the result of malloc?是有必要类型转换malloc和释放calloc

我google搜索,找出的malloc释放calloc的类型转换的原因。但是,我只发现的类型铸造malloc没有必要,因为它返回void指针但是,calloc。这与calloc也是一样的原因?

现在,如果我们搬回到第一点,关于的malloc释放calloc的返回值。然后,我发现,都返回分配空间。所以,我在这里有点困惑。所以,我的问题是

  1. 什么是的malloc释放calloc

  2. 的返回值是有必要类型转换的malloc释放calloc。为什么?

+0

@hmjd可能是......但我在这里同时要求'malloc'和'calloc'。 – Ravi

+0

是的,这是重复的,但是编译器在要求您将void指针转换为任何其他类型时会变得更加狡猾 - 这是针对void指针的原始目的飞行的,这是一种通用类型,可以是施放并分配给任何东西。这是更“C”的进步。 – user2548100

回答

7

malloc和calloc的返回值是什么?

它是指向voidvoid*)的指针。

是否需要键入malloc和calloc。为什么?

不,因为从指针到void到指向对象的指针的转换是隐式的。

C11(n1570),§6.3.2.3指针
一个指向void可转化为或者从一个指针到任何对象类型。

这对malloccalloc都是正确的。可分配给任何指针类型。在C中,它没有必要类型转换void*,因为它是由compiler.But在C隐式进行

+1

+1供参考 – CCoder

1

什么是malloc()和释放calloc()的返回值?

void *malloc(size_t size); 
void *calloc(size_t nmemb, size_t size); 

void*由两者的功能返回。

是否需要键入malloc和calloc。为什么?

不需要强制转换。 malloc()calloc()函数返回一个指针,指向为任何类型的变量适当对齐的已分配内存。出错时,这些函数返回NULLNULL也可以通过成功调用malloc()(大小为零)或成功调用calloc()nmemb或大小等于零)来返回。

2

malloc()calloc()回报void * ++,它会给你的错误,如果你不强制转换

1

返回值malloccallocvoid*。这些函数分配的堆内存空间的地址。

这两个函数都分配内存。它们之间的唯一区别是

  • malloc只是分配内存。
  • 释放calloc分配内存并将其初始化为0。

在C其不推荐投这些函数的返回值。

在C++中,它是强制转换。