一,malloc函数的定义
malloc和free()函数的头文件:#include<stdlib.h>
void* malloc(size_t size);
- 1
malloc函数的返回类型为void*, size_t即unsigned int(无符号整型),size是我们所要在堆区中开辟的字节个数,注意malloc以字节为单位。malloc在堆区开辟size个字节后,会返回那块内存空间的起始地址,我们要用指针来接收开辟的那块起始地址。
二,malloc函数的使用
#include<stdio.h>
#include<errno.h>//strerror的头文件
#include<stdlib.h>//malloc的头文件
#include<string.h>//strerror的头文件
int main()
{
int* p=(int*)malloc(10 * sizeof(int));//或malloc(40)
if (p == NULL)//开辟失败,malloc返回空指针
{
//打印错误原因的一个方式
printf("%s\n", strerror(errno));
}
else
{
//开辟成功
int i;
for (i = 0; i < 10; i++)
{
*(p + i) = i;
}
for (i = 0; i < 10; i++)
{
printf("%d ", *(p + i));//0 1 2 3 4 5 6 7 8 9
}
}
free(p);
p=NULL;
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
解析:
1.我们在堆区开辟的是10个整型的空间,所以我们把申请的空间交给整型指针int* p来维护。由于malloc的返回类型是void,所以我们要将其强制转换成int类型。**
2.因为malloc是在堆区上开辟空间,所以我们要考虑到内存开辟失败的情况,MSDN上说:malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available. (开辟成功malloc会返回一个无类型的指针指向开辟的空间的起始地址,如果没有足够的内存空间,即开辟失败,则返回空指针),因此,malloc的返回值一定要做检查!!!!!!