C语言基础-动态分配存储空间

本文介绍了C语言中的动态内存分配函数malloc()、calloc()以及释放内存的free(),并通过代码示例展示了如何正确使用它们以及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态分配存储空间

需要包含stdlib库

  1. malloc
void *malloc(size_t n);
  • 存储空间分配成功后,返回指向n字节大小存储空间的指针;分配失败返回NULL
  • 分配的存储空间未进行初始化
  1. calloc
void *calloc(size_t n, size_t size);
  • 存储空间分配成功后,返回指向n个size大小空间数组的指针;分配失败返回NULL
  • 分配的存储空间被初始化为0
释放动态分配的存储空间

free

free(p);//p为之前通过malloc或calloc返回的指针
  • free之后就不要再用指针p了,因为它指向的内容操作系统认为是没有分配过的
  • free之后最好p置NULL
代码示例
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
	int *pi;
	pi = (int *)malloc(sizeof(int)); //分配int大小的空间,使用int指针接收
	*pi = 10;
	printf("pi is %d\n", *pi);
	
	free(pi);//释放pi,释放分配的空间
	*pi = 100; //依然可以使用,但是很危险,操作系统可能会把这个内存分给其他指针
	printf("After free pi is: %d\n", *pi);
	
	int *pi2 = (int *)malloc(sizeof(int));
	*pi2 = 200;
	printf("pi2 is %d\n", *pi2);
	printf("After free pi is: %d\n", *pi); //不再是100了
	free(pi2);

	pi = NULL;
	pi2 = NULL;
	
	return 0;
}

运行结果

pi is 10
After free pi is: 100
pi2 is 200
After free pi is: 200
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值