函数声明:
void *malloc(size_t size)
头文件:
#include <stdio.h>
函数描述:
- 分配所需的内存空间,并返回一个指向它的指针。
参数:
- size – 内存块的大小,以字节为单位。
返回值:
- 该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。
实例:
下面的实例演示了 malloc() 函数的用法。
#include <stdio.h>
#include <stdlib.h>void update_value(int* p){*p = 100;
}int main()
{//在栈上面分配变量a 占4个字节int a = 10;//申请类型是int内存空间;占4个字节;p指针指向该4个字节的内存空间 int *p = (int*)malloc(sizeof(int));//p变量也占4字节;所以sizeof(p)=8个字节//赋值p只指向的动态空间为50*p = 50;printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));free(p);//修改p指向的内存中的数据printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));update_value(p);printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));return(0);
}
注:当内存不再使用的时候,应使用free()函数将内存块释放掉。
void*:表示未确定类型的指针,C/C++规定void*
可以强转为任何其他类型的指针,关于void还有一种说法就是其他任何类型都可以直接赋值给它,无需进行强转,但是反过来不可以。
malloc:分配的内存大小至少为参数所指定的字节数。
malloc
的返回值是一个指针,指向一段可用内存的起始位置,指向一段可用内存的起始地址,多次调用malloc
所分配的地址不能有重叠部分,除非某次malloc所分配的地址被释放掉malloc应该尽快完成内存分配并返回(不能使用NP-hard的内存分配算法)实现malloc时应同时实现内存大小调整和内存释放函数(realloc和free)
malloc
和free
是配对的,如果申请后不释放就是内存泄露,如果无故释放那就是什么也没做,释放只能释放一次,如果一块空间释放两次或者两次以上会出现错误(但是释放空指针例外,释放空指针也等于什么也没做,所以释放多少次都是可以的。)