有关malloc与realloc

来源:互联网 发布:上古卷轴5 杰洛特数据 编辑:程序博客网 时间:2024/04/20 10:03

这两个东西出现在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");elseprintf("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);elseprintf("no\n");p=(int*)realloc(p,1000*sizeof(int));if(p)printf("0x%x\n",p);elseprintf("no\n");p=(int*)realloc(p,10*sizeof(int));if(p)printf("0x%x\n",p);elseprintf("no\n");return 0;}
特点:本测试看的出来,当重新分配地址较原来大的话,内存空间地址可能会指向另外一个地方,而较原来小的话,只是在程序之中的一部分损失掉对应信息(但该信息仍保存在内存中)







原创粉丝点击