动态内存开辟

本文深入探讨了动态内存管理的基本概念,包括malloc、calloc、realloc和free等关键函数的使用方法,以及在C语言中如何避免常见的动态内存开辟错误。

动态内存管理:
无论我们用定义int,char,double等类型的变量等来申请内存空间,但是这样的方法非常局限,因为每个人的需求不同,所以需要用动态开辟空间来满足人们的需求。局部变量的数组都是在栈区的,全局变量开辟在静态区,而动态申请空间是在堆区中,可以改变其大小满足实际需求。
这时就需要动态开辟的相关函数来实现相应的功能。

malloc
calloc
realloc

free
malloc和free必须成对使用。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
int* p=(int*)malloc(10*sizeof(int));//开辟10个整型
if (p == NULL)
	{
		printf("s\n", strerror(errno));
	}
	else
	{
		int i = 0;
		for (i = 0; i < 10; i++)
		{
			*(p + i) = 10;
			printf("%d ", *(p + i));
		}
	}
	free(p);//必须释放
	p = NULL;//设置成空指针

void* malloc(size_t size);
void* :使用者可以根据自身需要开辟各种类型的空间
voidfree(void memblock);释放某块空间的首地址

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
int* p=(int*)calloc(10,sizeof(int));//把是个整形初始化为10
if (p == NULL)
	{
		printf("s\n",strerror(errno));
	}
	else
	{
		int i = 0;
		for (i = 0; i < 10; i++)
		{
			*(p + i) = 10;
			printf("%d ", *(p + i));
		}
	}
	free(p);
	p = NULL;
	return 0;
}

void* calloc(size_t num ,size_t size);
calloc函数可以初始化开辟的空间变量的值为0

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
int* p=(int*)calloc(5,sizeof(int));//calloc有两个参数
if (p == NULL)
	{
		printf("s\n",strerror(errno));
	}
	else
	{
		int i = 0;
		for (i = 0; i < 5; i++)
		{
			*(p + i) = 10;
			printf("%d ", *(p + i));
		}
		int* ptr=(int*)realloc(p,10*sizeof(int))//
	}
	free(p);
	p = NULL;
	return 0;
}

void* realloc(,size_t memblock,size_t size);选择要扩充开辟的空间的首地址进行开辟
动态内存开辟的常见错误
1:对空指针进行解引用操作
2:对动态内存开辟的越界访问
3:对同一块动态内存空间多次释放
4:对开辟的内存忘记释放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值