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)

posted @ 2022-05-06 20:27  steve的miao  阅读(120)  评论(0编辑  收藏  举报