有关malloc与realloc

这两个东西出现在c语言里还好说,出现在数据结构里真是频率比较高的,而且傻傻分布不清楚,所以还是简单分析一下2333

一、malloc函数

头文件:#include <malloc.h>(也可用#include<stdlib.h>,如果用c++的话会被包含在#include<iostream>里)

作用:给我们的程序请求出一片内存,以供使用,一般使用过后要用free函数释放掉内存(没有free的话,会造成内存泄漏.一部分的内存没有被使用,但是由于没有free,因此系统认为这部分内存还在使用,造成不断的向系统申请内存,使得系统可用内存不断减少.)

默认返回值:void

一般使用形式:("强制转换类型")malloc(“分配空间大小”);

特点:逻辑上分配有序

样例:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int *p;
	p=(int*)malloc(100*sizeof(int));
	if(p)
	printf("yes\n");
	else
	printf("no\n");
	free(p);
	return 0;
}
二、realloc函数

头文件:头文件:#include <malloc.h>(也可用#include<stdlib.h>,如果用c++的话会被包含在#include<iostream>里)

作用:对malloc申请的内存进行大小的调整

特点:realloc可以对给定的指针所指的空间进行扩大或者缩小,无论是扩张或是缩小,原有内存的中内容将保持不变.当然,对于缩小,则被缩小的那一部分的内容会丢失.realloc并不保证调整后的内存空间和原来的内存空间保持同一内存地址.相反,realloc返回的指针很可能指向一个新的地址.

样例:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int *p;
	p=(int*)malloc(100*sizeof(int));
	if(p)
	printf("0x%x\n",p);
	else
	printf("no\n");
	p=(int*)realloc(p,1000*sizeof(int));
	if(p)
	printf("0x%x\n",p);
	else
	printf("no\n");
	p=(int*)realloc(p,10*sizeof(int));
	if(p)
	printf("0x%x\n",p);
	else
	printf("no\n");
	return 0;
}
特点:本测试看的出来,当重新分配地址较原来大的话,内存空间地址可能会指向另外一个地方,而较原来小的话,只是在程序之中的一部分损失掉对应信息(但该信息仍保存在内存中)







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值