0

次の関数セグメントをデバッグしようとすると、pCellTower->m_pCellTowerInfo = pCellInfo の行で実行が停止します (関数から飛び出します)。

RILCELLTOWERINFO* pCellInfo = (RILCELLTOWERINFO*)lpData;

CCellTower *pCellTower = (CCellTower*)cbData;
if(pCellTower != NULL)
{
    pCellTower->m_pCellTowerInfo = pCellInfo;
}

(ポインタ pCellInfo は設定されていません)

次に、次の行にコメントを付けようとしました。

RILCELLTOWERINFO* pCellInfo = (RILCELLTOWERINFO*)lpData;

CCellTower *pCellTower = (CCellTower*)cbData;
if(pCellTower != NULL)
{
    //pCellTower->m_pCellTowerInfo = pCellInfo;
}

このようにして、関数は正常に実行されます。

誰が何が間違っているのか知っていますか?

4

2 に答える 2

2

最も可能性の高い説明は、pCellTowerも設定されていないということです。ランダムなビットが含まれている可能性があり、アプリに割り当てられたメモリの外側を指している可能性があります。OSは、プログラムが割り当てられたスペースの外に書き込むことを許可できないため、書き込みが拒否されたという何らかのメッセージ(Windows:例外、Unix / Linux:シグナル)をプログラムに送信します。

于 2009-01-14T10:36:40.830 に答える
0

cbData値の元の場所を逆方向にトレースすると、初期化されていないランダムな値であることがわかります。

于 2009-01-14T10:42:42.860 に答える