C-申请内存
这些函数包含在<stdlib.h>头文件中
malloc
int* p = (int*)malloc(100 * sizeof(int));//最好能强制类型转换
- malloc是申请空间 free是释放空间 他俩需要成对出现
calloc
*void calloc( size_t num, size_t size );
- Allocates an array in memory with elements initialized to 0.
- 在内存中分配元素初始化为0的数组,等于是开辟出来的空间直接会被初始化为0
- 这里与malloc申请空间方式不同的是,在()中就声明了开辟的是什么类型的,多少个。所以前面可以不强制类型转换
- 其实我们可以把强制类型转换当成习惯,反正又没错,需要什么转换什么就好了
- calloc同样也要与free成对出现
int* p = (int*)calloc(10,sizeof(int));
if (p == NULL)
{
perror("main");
return 1;
}
//使用
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = 5;
}
realloc
void realloc( void memblock, size_t size );
- 括号中的参数,第一个为要改变空间的首地址,第二个为改变后的大小
- Reallocate memory blocks.
- 有时候需要我们改变申请空间的大小,这时候可以对已经开辟了的空间进行增加或者减小空间操作
//还需要p指向更大空间
//realloc调整空间
int*ptr = (int*)realloc(p, 20000 * sizeof(int));
//需要扩充的空间的地址,需要扩充的大小
//大小不够,他就置成空指针了
//所以就设置一个*ptr先来接收
if (ptr != NULL)
{
p = ptr;
} //如果空间足够,就用p来接手
free(p);
p = NULL;
free
- 可以释放由
malloc\calloc\realloc
函数申请的内存空间
allocate
char* recordDate = allocate<char>(20)