malloc(),calloc(),realloc()使用的一点经验

转载:http://hi.baidu.com/xl3391/blog/item/867b183d7180942d5bb5f5e8.html


malloc 函数指向一个大小为size的空间,如果错误发生返回NULL。 存储空间的指针必须为堆,不能是栈。

这样以便以后用free函数释放空间,calloc函数返回一个指向num数组空间,每一数组元素的大小为size

如果错误发生返回NULL。

#include <stdlib.h>

void *calloc( size_t num, size_t size );

三个函数都返回void类型指针。如果函数返回void ,它会返回任何值,但是当他返回void*时,它返回一个

通用的指针。用于指向任何数据类型。许多编译器都会给出警告。如果void指针被赋予了一个类型指针,如

int*。可以通过下面的方法让程序在编译器之间更具有移植性。即把他们的返回值强制转换成存储地址内变量

的类型。例如下面的某段程序:

#include<stdio.h>
#include<stdlib.h>
int main()
{
int *intpointer=NULL;
//double *doublepoint=NULL;
intpointer=malloc(sizeof(int));
*intpointer=50;
printf("the memory location %p contains %d\n,",intpointer,*intpointer);
return 1;
}

编译时会报错:

error C2440: '=' : cannot convert from 'void *' to 'int *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.

将第七行稍微改一下:intpointer=(int *)malloc(sizeof(int));

即可编译成功。另外用这些函数申请的内存空间用完后一定记得释放其占用的空间,否则会造成内存泄露,

是个很严重的错误。


你可能感兴趣的:(malloc)