|
前几天, 项目组的软件出了问题, 老是崩溃. 攻关花了不少时间, 各相关部门的高手都请遍了, 只知道是内存使用的错误, 具体问题硬是没解决. 我用的是tornado + vxWorks系统, 所以来这里问问.
后来我检视代码, 发现是下面描述的这么个问题, 虽然搞定了, 但是大家仍然不大明白怎么回事:
typedef struct
{
unsigned short wCmd;
....
unsigned char* para;
}Cmd;
void foo(short wCnt)
{
Cmd* pCmd = new Cmd[wCnt];
memset(pCmd, 0, wCnd*sizeof(Cmd));
for (short wIdx = 0; wIdx < wCnt; wIdx++)
{
pCmd[wIdx].para = new unsigned char[10]; //申请空间
........
}
delete []pCmd; //没有释放各个Cmd的para
}
由于上面没有释放各个Cmd的para, 导致内存泄漏. 但软件出错肯定不是内存耗尽引起的, 因为这个内存泄漏非常有限, 而且只要软件一启动, 涉及到为STL的vector分配内存, 很可能就挂了.
但原因确实是这个, 因为把上面的 pCmd[wIdx].para 释放之后, 再也没出过问题.
不管是我个人还是其他大牛, 都对这事给不出个令人信服的解释.
我只能用: 跟操作系统的内存管理策略有关, 这种解释来糊弄自己.
特来向各位专家请教.
|
|