c语言 循环报错,while循环中的malloc与free报错
发布日期:2021-10-27 11:20:55 浏览次数:8 分类:技术文章

本文共 1427 字,大约阅读时间需要 4 分钟。

while循环中的malloc与free出错

本帖最后由 flappingwings 于 2014-05-23 15:07:04 编辑

各位大神:

int num_non_zero = 0;

int  *Ai = NULL;

double *Ax = NULL;

....

while(iteration_flag)

{

1. 计算num_non_zero的值,对于每次迭代,num_non_zero值不同,代码省略;

2. 为Ai和Ax分配内存

Ai = (int *)malloc(num_non_zero * sizeof (int));

if (!Ai) printf("Allocation problem for Ai !!!");

Ax = (double *)malloc(num_non_zero * sizeof (double));

if (!Ax) printf("Allocation problem for Ax !!!");

3. 计算Ai与Ax中各元素的值,代码省略;

4. 使用Ai与Ax进行计算,代码省略;可以确定的是在计算过程中不会改变Ai与Ax的指向;

5. 释放Ai与Ax的内存,随后将它们设置为NULL;

free(Ai); Ai = NULL;

free(Ax); Ax = NULL;

}

问题:在visual studio 2013中编译之后运行这段程序时,会产生错误,检查之后发现如果去掉第5步中的Ai=NULL和Ax=NULL之后,程序可以运行,但偶尔还是会产生free错误,请问各位大神,可能的原因是啥?如何修改呢?非常感谢!

------解决方案--------------------

感觉会不会是malloc失败?给if加上else,在else中free并置NULL试试

------解决方案--------------------

free失败无非这两种情况:

1 内存越界,free的时候free多了。检查中间任何和内存写有关的地方。这种问题一般是必现

2 内存破坏,相邻的内存越界。检查所有内存拷贝和内存写的地方。这种问题一般非必现。

楼主的应该是内存破坏。你在调试状态,把出错的指针在memory里,看看相邻内存里的内容是啥

------解决方案--------------------

仅供参考//使用动态分配

#include 

#include 

#include 

int i,L;

char *p;

void main() {

for (i=0;i<20000;i++) {

L=rand();

p=malloc(L);

if (NULL==p) {

printf("malloc error!\n");

continue;

}

memset(p,0,L);

free(p);

}

}

//不使用动态分配

#include 

#include 

#include 

#define MAXLEN 30000

int i,L;

char buf[MAXLEN];

char *p;

void main() {

p=&buf[0];

for (i=0;i<20000;i++) {

L=rand();

if (L>MAXLEN) {

printf("L>MAXLEN==%d, ignore spilth.\n",MAXLEN);

L=MAXLEN;

}

memset(p,0,L);

}

}

转载地址:https://blog.csdn.net/weixin_34518190/article/details/117204455 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c语言捕捉信号的头文件,C语言之捕捉信号
下一篇:这是一个人机反猜数字游戏,人想一个数,电脑来猜, c语言,“人机猜数游戏”C高手来~~~~~~~~~~~~~~~~~~~~? 爱问知识人...

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月23日 21时26分00秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

php rand() 重复,php – mt_rand()给我总是相同的数字 2019-04-21
php taglib.php,thinkphp5 taglib自定义标签教程 2019-04-21
java常用包类 array,Java中的StringBuffer和数组Arrays以及常用类型的包装类 2019-04-21
ctf常见php,CTF中常见的PHP伪协议 2019-04-21
php语言冒泡法,PHP 冒泡排序法 2019-04-21
php如何数组去重复,PHP如何去除数组重复元素? 2019-04-21
java转换ab的值,查看新闻/公告--[整理]Java将AB1234形式的16进制字符串转换为10进制数值,考虑字节序的影响.... 2019-04-21
ui php h5,画出自己的UI组件的详情 2019-04-21
linux服务文件编写,linux编写systemd下服务脚本 2019-04-21
hdfs linux 目录是否存在,Linux中判断hdfs文件是否存在 2019-04-21
linux学习需要什么基础,学linux需要什么基础? 2019-04-21
linux vim编辑kconfig 无法wq,Linux-4.9.2内核在mini2440上的移植(三)——编译环境测试... 2019-04-21
高斯勒让德在c语言中的程序,c语言:用递归方法编写程序,求n阶勒让德多项式的值... 2019-04-21
c语言单片机电子时钟,新人求个51单片机的电子时钟汇编语言(C语言的还没学到)... 2019-04-21
c++语言文件流,C++文件流 2019-04-21
android 动态毛玻璃,Android毛玻璃背景效果简单实现代码 2019-04-21
android 按钮提示,的Android按钮工具提示 2019-04-21
iphone通讯录 android,3个方法,教你如何快速而又有效的将联系人从iPhone转移到安卓... 2019-04-21
android horizontalscrollview 滑动事件,ScrollView的滑动监听(以HorizontalScrollView为例) 2019-04-21
win7自定义html为桌面,Win7系统自定义桌面主题的方法 2019-04-21