这两个东西出现在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;
}
特点:本测试看的出来,当重新分配地址较原来大的话,内存空间地址可能会指向另外一个地方,而较原来小的话,只是在程序之中的一部分损失掉对应信息(但该信息仍保存在内存中)