打印

动态内存分配异常问题如何查找什么问题

[复制链接]
686|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
张さん|  楼主 | 2018-7-5 19:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
    }

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

448

主题

464

帖子

1

粉丝