免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2838 | 回复: 7
打印 上一主题 下一主题

诡异的内存分配问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-12 16:46 |只看该作者 |倒序浏览
  1. class CRudp  
  2. {
  3. public:
  4.       CRudp();
  5.      .............//functions
  6. private:
  7.     ///hold all the instances of rudp
  8.     static CRudpList m_rudpList;
  9.     ///timestamp
  10.     static UINT   m_nNow;

  11.     ///rudp modules
  12.     CRudpEngine*     m_pEngine;
  13.     CRudpFragment*   m_pFragment;
  14.     CRudpIO*         m_pIO;
  15.     CRudpReassemble* m_pReassemble;
  16.     DISPATCH         m_pfDispatch;
  17.     ONTIMER          m_pfOnTimer;
  18.     int              m_nTimerTickCount;
  19.     BOOL             m_bExitLoop;
  20.     static BOOL      m_bFirstInstance;
  21. }
复制代码
  1. class CMediaServer
  2. {
  3. public:
  4.      CMediaServer();
  5.     .......//functions
  6.         CRudp   m_cRudp;
  7. private:
  8.         CConf        *m_pConfList;
  9.         bool         m_nxxx;
  10.         int         m_nConfCount;
  11.         int         m_nRecvBps;
  12.         int         m_nSendBps;
  13.         int        m_nTickCount;
  14.         bool        m_bRunning;
  15. }
复制代码
  1. #include <unistd.h>
  2. #include "Rudp.h"
  3. #include "MediaServer.h"

  4. CMediaServer g_cMediaServer;
  5. int main()
  6. {
  7.      printf("====\n");
  8. }
复制代码
分别在两个类里的默认构造函数最后一行加入
printf("rudp running...first=>%x,m_nNow=>%x,m_pEngine=>%x,m_pfDispatch=>%x,m_pfOnTimer=%x,m_nTimerTickCount=>%x,m_bExitLoop=>%x,m_add=>%x,last=>%x.\n",&m_rudpList,&m_nNow,&m_pEngine,&m_pfDispatch,&m_pfOnTimer,&m_nTimerTickCount,&m_bExitLoop,&m_add,&m_bFirstInstance);

printf("MediaServer::Rudp=>%x,m_pConfList=>%x,m_nxxx=>%x,m_nConfCount=>%x,m_nRecvBps=>%x,m_nSendBps=>%x,m_bRunning=>%x\n",&m_cRudp,&m_pConfList,&m_nxxx,&m_nConfCount,&m_nRecvBps,&m_nSendBps,&m_bRunning);

输出为:
rudp running...first=>7a3fa4,m_nNow=>7a3fa0,m_pEngine=>804c304,m_pfDispatch=>804c314,m_pfOnTimer=804c318,m_nTimerTickCount=>804c31c,m_bExitLoop=>804c320,m_add=>804c324,last=>7a3f8c.


MediaServer::Rudp=>804c300,m_pConfList=>804c31c,m_nxxx=>804c320,m_nConfCount=>804c324,m_nRecvBps=>804c328,m_nSendBps=>804c32c,m_bRunning=>804c334

这里为什么 CRudp 中的m_bExitLoop 和 CMediaServer 中的m_nxxx地址打印出来是一样的?(100%每次地址的值是一样的)
这个让我完全无解,求各位大大指导下!{:3_201:}

http://dev.yesky.com/460/2379960.shtml  这是网上查的一个c++内存分配方法

论坛徽章:
0
2 [报告]
发表于 2012-02-12 17:02 |只看该作者
55555555{:3_201:}

论坛徽章:
0
3 [报告]
发表于 2012-02-12 17:21 |只看该作者
{:3_201:}

论坛徽章:
0
4 [报告]
发表于 2012-02-13 09:49 |只看该作者
你把初始化和内存分配混在一起了?

论坛徽章:
0
5 [报告]
发表于 2012-02-13 10:33 |只看该作者
猜测,一个地址4个字节
每次这两个布尔变量都被优化到同一个地址上面去了

论坛徽章:
0
6 [报告]
发表于 2012-02-13 17:07 |只看该作者
回复 4# bs


    不是很明白,能说得清楚些吗?谢谢。

论坛徽章:
0
7 [报告]
发表于 2012-02-13 17:11 |只看该作者
回复 5# iamqk


    就是因为几个变量的地址变量相同,接着各种问题跟着来了。

论坛徽章:
0
8 [报告]
发表于 2012-02-13 17:25 |只看该作者
初始化列表是什么用的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP