永发信息网

C语言编程时使用MALLOC后一直没有用FREE函数释放内存空间怎么办

答案:4  悬赏:30  手机版
解决时间 2021-01-19 12:19
C语言编程时使用MALLOC后一直没有用FREE函数释放内存空间怎么办
最佳答案
如果不适用free释放内存,会造成内存泄露。随着程序的运行,程序所占内存越来越多,知道系统奔溃或者程序结束。
1、free函数:
原型:void free(void *ptr);
功能:释放malloc(或calloc、realloc)函数给指针变量分配的动态内存;
头文件:malloc.h或stdlib.h;
2、为了避免释放已经释放了内存的指针内存,或没有释放内存,在C语言中最好是在定义指针时赋初值NULL,释放后立即赋NULL,释放时检查指针值再决定释放就避免释放错误了,例如:
int *a = NULL
int *b = (int*) malloc(sizeof(int) * 10);
a= b;

if(a != NULL) {free(a);a=NULL;}
if(b != NULL) {free(b);b=NULL;}
全部回答
你这里程序有问题:
struct card Card[80];struct card *pcard;
这里Card[80]是数组,已经自动分配空间了;
如果需要指针pcard指向这个空间,直接pcard = Card;就可以了,
不用再pcard = (struct card *)malloc( sizeof(struct card));if (pcard == NULL){exit(0);}分配空间了
正如 杨小丢Summer 所说 你已经改变了指针的指向 再想free原来申请的空间已经不可能了
程序结束的时候操作系统会帮你把申请的存储空间free了的....你贴一下问题吧,可能问题不是你说的地方吧我想追问补充了555求帮助谢谢!追答pcard = Card那句话有问题..你pcard指向card之前malloc的空间就相当于丢失了,无法再释放了。然后你pcard指向card后(我记得有的编译器你这句话都会报错),试图释放pcard就是试图释放card这个局部变量,所以就出错了。建议删去malloc和free那两句话:
int main(){
int i;
struct card Card[80];
struct card *pcard;
pcard = Card;
。。。
return 0;
}追问哦。。。谢谢!那什麼时候需要malloc呢??追答当你需要动态申请空间的时候就malloc啊...其实我一直觉得calloc方便点,因为它会帮你置零,还是举个例子吧,比如你需要建立一个数组来存储N个int信息,但是你不知道你的N是多大,就可以
int N;
从外设初始化N的数值
int * info = (int *)malloc(N*sizeof(int ));
...//使用info就和数组使用方式差不多
free(info);
然后我觉得吧,还有一点你能申请的局部变量远远没有malloc申请的多,意思就是
int a[500][500];绝对会报错
但是动态申请可以申请的非常之大,在内存空间允许的前提下都能hold住
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
花都地区 求给狗狗打疫苗针价钱表。
春秋到北宋大约多少年如题
鸟的天堂含义是什么
地平线穿过鼻底和地平线在胸前的素描头像怎么
重庆电视台有一个民事法律咨询的栏目是什么
星际战甲遗物问题
9月10号dnf盒子能开出些什么
椒江阳光国际公寓中学学区划哪
清华大学好吗
怎样控制好我的花销呢?
解梦我昨晚梦见被僵尸咬什么意思啊?
云南省元阳县共有多少人口
微信新添加的好友,王者荣耀为什么不显示
树木能干什么能干什么能干什么
各位大神们,请问红橘头沃柑和酸橘头沃柑有什
推荐资讯
奠基仪式是不是准备开始打地基前的仪式
九江去庐山动车站要多久?
on your side road was far from tired啥意思
如果当年张国焘还留在国内是否会死得很惨
单选题唐代负责政务的六个重要行政单位分别是
最近准备入手个二手汽车,在爱丽舍,新赛欧,
求date a live 约会大作战 op 罗马音+日文+中
活期存折一万改定期手写折取一万去查银行查钱
女性性欲来了又什么特征
昌邑市有中信银行吗
怀橘遗母,是指谁的事迹?
体重500N的小明晚上乘电梯登上广州塔.下列说
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?