您的位置:首页 > Web前端

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

2015-07-22 17:40 197 查看
语言: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程 malloc buffer 代码