c语言 循环报错,while循环中的malloc与free报错

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);

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值