1.各位大神,我利用动态内存分配的空间创建数组,我仿真了三个数组的起始地址和末地址,地址没有重复,但是其中两个较小的数组会被初始化为另外一个数组的部分内容,有什么好的解决办法吗?下面是我申请的数组,前两个内存空间大小是120,第三个是16000.
u16 *TCPSimSlaveSRegInBuf; //Modbus 输入寄存器 功能码 04
u16 *TCPSimSlaveSRegHoldBuf; //Modbus 保持寄存器 功能码 03 16
u16 *TCPSimSlavesRFuc71Buf; //Modbus 自定义寄存器 功能码 71
下面是我申请内存的部分程序:调试发现和“TCPSimSlavesRFuc71Buf”数组申请内存的顺序有关,只要把这个数组内存申请的语句放到其余两个之前,则不回出现异常。下面的程序顺序,“TCPSimSlaveSRegHoldBuf”数组是正常的,“TCPSimSlaveSRegInBuf”是异常的。
//输入寄存器的数量申请了120个
TCPSimSlaveSRegInBuf = mymalloc(SRAMEX,SimSlaveSRegInBufMaxNum);//------申请内存 Modbus输入寄存器 功能码 04
if(TCPSimSlaveSRegInBuf == NULL){
return 1 ;//--------------------内存申请失败了,直接退出
}
/*初始化 数据空间为0*/
for(i = 0; i < SimSlaveSRegInBufMaxNum ;i++)
{
TCPSimSlaveSRegInBuf = 0;
}
//申请自定义寄存器的内存空间大小为16000;
TCPSimSlavesRFuc71Buf = mymalloc(SRAMEX,SimSlavesRFuc71BufMaxNum);//------申请内存 Modbus自定义寄存器 功能码 66
if(TCPSimSlavesRFuc71Buf == NULL){
return 1 ;//--------------------内存申请失败了,直接退出
}
/*初始化 数据空间为0*/
for(i = 0; i < SimSlavesRFuc71BufMaxNum ;i++)
{
TCPSimSlavesRFuc71Buf = 0;
}
//申请保持寄存器的内存空间大小为120;
TCPSimSlaveSRegHoldBuf = mymalloc(SRAMEX,SimSlaveSRegHoldBufMaxNum);//------申请内存 Modbus保持寄存器 功能码 03 16
if(TCPSimSlaveSRegHoldBuf == NULL){
return 1 ;//--------------------内存申请失败了,直接退出
}
/*初始化 数据空间为0*/
for(i = 0; i < SimSlaveSRegHoldBufMaxNum ;i++)
{
TCPSimSlaveSRegHoldBuf = 0;
} |