malloc函数的用法

 

 

 

 p=(int*)malloc(sizeof(int)*(n+1))

malloc 是内存分配

分配的空间以字节为单位

sizeof(int)*(n+1) 是求一个字节数的过程

sizeof(int)就是int类型的字节数,再*(n+1),其实就是连续的n+1个int型数的空间所含的字节数

前面二者合起来就是分配了大小为n+1个int型的空间所含的字节数

此时(int*)是强制转化为int型的指针,所以p就是一个指向这连续n+1个int的int指针。
这种分配内存的方式是C语言中实现的,为什么不直接指明字节数,
而用sizeof(int)这种运算是因为对于不同的计算机,对于int的分配空间不一定相同,这样有一定的移值性。
sizeof就是空间大小,malloc就是分配空间的意思,int整形
int* 将malloc分配的内存空间强制转换为int型的指针。
(
malloc申请的内存都是空类型 也就是 void * 但是,
这个内存取决于你怎么去使用,所以,将其转换为相应的类型是必要的!
malloc返回的是void*
)
指针里边存放的只有地址而已 没有指向的内存大小
比如你可以把char *型的指针强制转换成int * 那么引用的时候就会取4个字节的内存
(原来只会取一个字节,这个就是强制转换的意义了吧)


(int *)malloc(sizeof(int)) sizeof(int)=4 int占4个字节
(int *)malloc(sizeof(int *)) sizeof(int *)=4 指针占4个字节
(char *)malloc(sizeof(char)) sizeof(char)=1 char占1个字节
(char *)malloc(sizeof(char *)) sizeof(char *)=4 指针占4个字节

如果前面有声明char *malloc();
那么malloc(sizeof(char))/malloc(sizeof(char *))等同于上面后2个

至于为什么要加 char * 这取决于malloc的左值,
因为malloc的左值是被声明为指向不同类型的指针,
不同类型的指针之间是不能赋值的,所以需要char * 进行强制类型转换


free(void *p)函数是用来释放程序动态申请的内存。其参数是个指针类型。

在C当中,只有当使用了动态内存申请函数malloc calloc realloc申请内存之后,才可以使用free来释放之。释放之后就不能再使用了。

在C++中,除了上述函数之外,还有new操作之后,都要使用free函数。

切记,动态申请内存使用完后,一定要记得释放,否则会有内存泄露问题。
 
posted @ 2013-04-30 10:54  Geekers  阅读(2390)  评论(0编辑  收藏  举报