动态内存管理

1、memset函数(初始化内存)

 void* _Dst初始化内存是谁

int  _val,用什么值来初始化

size_t  _Size初始化几个(字节数)

对无符号整型重命名为size_t

2、menset原理

memset(void*初始化内存的指针,int value传入的值,size_t size初始化多少个字节)

申请的空间按照字节为单位,用int value进行初始化

malloc calloc(初始化和memset合二为一)

malloc与memset的使用

 3、calloc 函数的使用

 

所使用的参数一个是个数count一个是字节数

 

int main()
{
	int* p = (int*)malloc(sizeof(int) * 10);
	assert(p != NULL);
	for (int i = 0; i < 10; i++)
	{
		printf("%5.1f", p[i]);

	}
	free(p);
	p = NULL;
}

 

4、ralloc

作用:在堆内存中扩容

注意:realloc的适用范围应与被扩容对象的内存空间相同

int main()
{
    int arr[10];//局部变量在栈上申请了十个单元格
    realloc();//在堆区,无法进行扩容
}

realloc函数调整内存大小分为3种情况:

IP的指向未发生改变,就是在之前内存不足的地方续上一块内存

 

 

#include<stdio.h>
#include<stdlib.h>
 int main()
 {
 int *p = NULL;
 int *ip = (int*)malloc(sizeof(int)*10);
 if(NULL == ip) exit(EXIT_FAILURE);
// 处理程序
 ip = (int*)realloc(ip,sizeof(int)*1000);
 // realloc 分配失败,返回 NULL ?
 if(NULL == ip) exit(EXIT_FAILURE);
 //正确处理方法
 p = (int*)realloc(ip,sizeof(int)*1000);
 if(NULL == p)
 {
 // 扩充失败,
 free(ip);
 exit(EXIT_FAILURE);
 }
 else
 { // free(ip);
 ip = p;
 // 处理程序
 }
free(ip);
 ip = NULL;//防止多次释放出现指针崩溃的现象
 return 0;
 }

5、 练习判断下列代码的对错:

 

 

 

 

 

6、因free出现崩溃的情况:

1.  int *p=(int *)malloc(100);

        free(p);

        free(p);//连续多次的释放内存会使程序崩溃

2.free(野指针);

3.    int a=0;

      int*p=&a;

     free(p);//会出现崩溃, a存在栈上 但是free释放的是堆上的内存

        所以free必须和malloc calloc realloc   dao 搭配使用

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值