after Normal block(#47) at 0x001D3908 错误的一次解决经历

语言:C

环境:win7&vc6++


代码: waveform = (s16*) malloc(SIZE_BUFFER); 

接着free(waveform),其中SIZE_BUFFER是1024*2个字节 。

我想往这块内存写入1024个16bit位宽的数据。

然后出现了如下错误提示: after Normal block(#47) at 0x001D3908  

我的上网找了资料,提醒是“内存越界”。

我解决的办法是:


将  #define SIZE_BUFFER  1024*2 +2 // 就是在后面加了两个字节的内存,问题解决。


问题:文件保存的1024个数据往内存里面写的时候,是否要多出一点,存一些类似于文件结束符的东西吗?希望高手不吝赐教。

 

----------------------------------------分割线 2015-7-27-----------------------------------------------

那个警告是解决了,但是,带来了一个新的问题:因为我们给FPGA的地址线是,10根,那么,只能寻址1024个地址。在FPGA的RAM里面,当传输1024个数据的时候,C动态分配了一个1024*sizeof(data) + 2 的内存空间。第一个数据写不进去。实验:1024*sizeof(data) + 4  还是第一个数据写不进去,当1024*sizeof(data) + 6的时候,第一个和第二个数据写不进去,或者写了一个垃圾值。依次类推。初步怀疑是,溢出问题。因为,我的地址线值给了10根。在FPGA端,只能寻址1024个单元。但是我只分配1024个单元的时候,会出现上面的Debug Error!

知道的同学请在下面留言。


----------------------------------------分割线 2015-7-27-----------------------------------------------

filename = (S16*)malloc(SIZE_BUFFER + 2);//注意:这个bug调了我很久时间,原因在于我们出现内存越界问题。
 //之前,我在defineSIZE_BUFFER那个地方,加了两个字节的内存块,但是在写入1024个数据的时候,第一个数据是
 //写不进去的。但是不加两个字节的内存,在free(filename)的时候会出现Debug Error:after Normal Block(#47)。
 //经过思考和debug,发现问题出现在这里,在给filename分配内存的时候多分配两个字节的内存就行了。
 //由于下面要对waveform进行地址操作,所以采用这种方式,因为free()函数要穿入的是动态分配的首地址。

 

问题完美解决。



2015-7-22

dp_huang


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值