程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c++-對日外包項目維護中沒能理解 ( NPTBL* )( pNpCtl + 1 ); 結果出現的bug

c++-對日外包項目維護中沒能理解 ( NPTBL* )( pNpCtl + 1 ); 結果出現的bug

編輯:編程綜合問答
對日外包項目維護中沒能理解 ( 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 );得出的是什麼結果

最佳回答:


pNpCtl + 1 指向pNpCtl的下一個 NPCTL 結構體, pNpTbl = ( NPTBL* )( pNpCtl + 1 );這句看來,NPCTL第一個結構體成員類型是NPTBL*,其它看不出什麼來了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved