这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » vxworks下free出错,很奇怪,malloc的地址和后来free的地址一样

共5条 1/1 1 跳转至

vxworks下free出错,很奇怪,malloc的地址和后来free的地址一样

菜鸟
2004-10-13 21:30:23     打赏

这是一个在x86上运行的vxWorks的任务,其程序代码段是这样的

char *buff;

char *temp_buff;

buff= (char *)malloc(count);

temp_buff=buff; for(i=0;i<count;i++) { read(ShuChuanFd,buff, 1); buff++; }

buff=temp_buff;

free(buff);

运行几次后,free这出错,说是,memPartFree:invalid block 0x7f21c2c in partition 0x5a2c50

调试的时候malloc的buff地址后free时buff的地址是一样的,但是free的时候还是报同样的错,大伙帮忙看看什么原因啊?还台目标机也不行,换了vxworks 还是不行!!




关键词: vxworks     出错     奇怪     malloc     地址         

菜鸟
2004-10-14 05:02:00     打赏
2楼
一般来说,可能是重复释放同一地址空间造成的。。。。。

菜鸟
2004-10-14 17:20:00     打赏
3楼

我这段代码确实在一个循环里,有没有解决办法?buff= (char *)malloc(count)中的count在每次循环时都不一样,所以没法在循环外分配内存。


菜鸟
2004-10-18 19:37:00     打赏
4楼

原来代码是这样的:

while(1){ temp_p = (char *)&Data_Pack;

read(ShuChuanFd1, temp_p, 1);

if((char)*temp_p == 0x23) { temp_p++; read(ShuChuanFd1, temp_p++, 1); read(ShuChuanFd1, temp_p++, 1); read(ShuChuanFd1, temp_p++, 1); read(ShuChuanFd1, temp_p++, 1); read(ShuChuanFd1, temp_p++, 1); count = Data_Pack.Package_L - 10; read(ShuChuanFd1, temp_p++, 1); read(ShuChuanFd1, temp_p++, 1);

buff = (char *)malloc(count); Data_Pack.Package_p =(unsigned char *) buff; for(i=0;i<count;i++) { read(ShuChuanFd1, buff, 1); buff++; } temp_p=temp_p+4; read(ShuChuanFd1, temp_p++, 1); read(ShuChuanFd1, temp_p, 1); checksum = Calculate_CheckSum(Data_Pack);

if((checksum == Data_Pack.Package_CheckSum) && (Data_Pack.Package_E == 0x55)) Recv_Process(Data_Pack); free(buff-count); //循环几次这里就出错 } } 后来我把malloc语句放到循环外边,把free语句改为buff=buff-count就可以了。可能就如seasoblue说的重复释放同一地址的原因。


菜鸟
2004-10-20 03:07:00     打赏
5楼

你的这个小孩不错唉!


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]