malloc的用法

发布时间 2023-07-03 09:34:02作者: 我好想睡觉啊

malloc用法说明

为什么要强制转换

答:因为malloc函数的返回值是void类型指针(void类型地址),即返回分配内存的起始地址,该地址上存储的数据是未定义类型的。
强制转换之后,一个是地址,就是在内存中这个变量从哪里开始存放
另一个是长度,得到完整的数据类型。该数据类型有两个属性,一个是地址,就是在内存中这个变量从哪里开始存放;另一个是长度,从这个地址开始,后面还有几个字节是属于当前这个变量。

要判断malloc有没有成功开辟内存空间

当malloc函数成功开辟内存后,会返回对应的指针。要是内存空间不够大,内存开启失败,会返回NULL.

int *p = (int*)malloc(sizeof(int));
if(p == NULL){
	perror("malloc failed");
	exit(1);
}

要对数据进行初始化

malloc函数只是负责开辟内存空间。并没有对数据进行初始化。我们可以使用memset函数进行初始化.

内存空间使用完成后,要释放空间

堆区开辟的内存空间,编译器是不会自动回收。需要开发者自己回收。可以使用free()。
注意:使用free函数释放结构体的时候,并没有释放结构体内的指针。结构体内的指针要单独free。

struct person{
	int age;
	char *name;
};
int main(){
	struct person *p = (struct person*)malloc(sizeof(struct person));
	if(p == NULL){
		perror("malloc");
		exit(1);
	}
	memset(p,0,sizeof(struct person));
	p->age = 18;
	p->name = malloc(sizeof(char) * 20);
	char *name = "jerry";
	strcpy(p->name,name);
	
	printf("p->name:\t%s\n",p->name);
	
	free(p->name);// 这里要单独将指针free掉
	free(p);
}

参考资料:https://blog.csdn.net/weixin_49146002/article/details/128314606