edvic 2013-10-11 05:59 采纳率: 100%
浏览 2027
已采纳

对日外包项目维护中没能理解 ( NPTBL* )( pNpCtl + 1 ); 结果出现的bug

小弟做的是对日外包项目维护工作,给了我一堆让人看不懂的代码。
日本狗的代码如下:
pNpCtl 和 pNpCur 是NPCTL结构体类型指针
这是给pNpCtl 赋值的时候
pNpCtl = (NPCTL*)LocalMalloc(lLen, (SWORD)NULL);
if (pNpCtl)
{
Gmemclr((TEXT*)pNpCtl, (SWORD)NULL, lLen);
pNpCtl->nNpLen = (SHALF)lLen;
/* Monitor ID /
Gmove(pNpCtl->sProcessor, sProcessor, sizeof(pNpCtl->sProcessor));
pNpCtl->byClass = abyClassNm [0]; /
Class /
pNpCtl->byAllCnt = abyClassCt [0]; /
Class の多重度 /
if (pSimCvt->pNpCtl)
{
pNpCur->pNpNext = pNpCtl;
}
else
{
pSimCvt->pNpCtl = pNpCtl;
}
pNpCur = pNpCtl;
pSimCvt->lNpCtll += pNpCtl->nNpLen;
}
else{
sprintf(sMsg, ASVSSIM_20, MYNAME, "NPCTBL", lLen);
ApPutConsoleMsg(hAplk, (UBYTE
)sMsg, NULL);
bRcode = FALSE;
}

传到另一个函数时代码如下

pNpTbl = ( NPTBL* )( pNpCtl + 1 );
for ( byUseCnt = 0; byUseCnt < pNpCtl->byUseCnt; pNpTbl++ )
{
if ( pNpTbl->byFlag == NPFLG_RUNNING )
{
pNtTbl = pNpTbl->pNtTbl;
if ( 0 < Gbufcmp( ( UBYTE* )&pSimCvt->NextTm,
( UBYTE* )&pNtTbl->EndTm,
sizeof( SIMDATE ) ) )
Gmove( &pSimCvt->NextTm, &pNtTbl->EndTm,
sizeof( SIMDATE ) );
byUseCnt++;
}
} /* For Loop /
pNpCtl = pNpCtl->pNpNext;
}

结果结构体pNpTbl里有部分数据出现错误的指针,导致程序崩溃。
是否能告知小弟 ( NPTBL
)( pNpCtl + 1 );得出的是什么结果

  • 写回答

1条回答

  • 红色代码 2013-10-26 09:56
    关注

    pNpCtl + 1 指向pNpCtl的下一个 NPCTL 结构体, pNpTbl = ( NPTBL* )( pNpCtl + 1 );这句看来,NPCTL第一个结构体成员类型是NPTBL*,其它看不出什么来了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog