现在的位置: 首页 > 综合 > 正文

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

2019年11月02日 ⁄ 综合 ⁄ 共 872字 ⁄ 字号 评论关闭

转载: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));

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

是个很严重的错误。

抱歉!评论已关闭.