语言: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