VC++ 2010 Express を使用しています。私は次のルーチンを書きました:
HRESULT DLTimeStampNow::Receive(IMediaSample *pSample)
{
long long fnum, fnum2;
REFERENCE_TIME timeStart=0, timeEnd=10000;
// make this sample available for the next worker-thread call to Transform()
pSample->AddRef();
CRefTime rtStream;
timeStart = 0;
timeEnd = 10000;
pSample->SetTime(&timeStart, &timeEnd);
EnterCriticalSection(&cs);
if (pSampleWaiting != NULL)
((IMediaSample*)pSampleWaiting)->Release();
pSampleWaiting = pSample;
SetEvent(hSampleIsReady);
LeaveCriticalSection(&cs);
return S_OK;
}
これは進行中の作業の一部です。そのため、fnum や rtStream などの変数は存在しますが、使用されていません。
実行時に、VC++ デバッガーはtimeStart = 0
またはtimeEnd = 10000
にブレークポイントを配置することを拒否します。デバッガーは、実行が に達した時点でゴミが含まれていることを示しますpSample->SetTime(&timeStart, &timeEnd);
。これに対処するために、変数宣言に=0
andを追加しました。=10000
これは機能しますが、なぜ必要なのですか?コンパイラは、コード内の定数の割り当てを回避する何らかの最適化を行っていると推測していますが、実際にtimeStart
andに値を割り当てることを忘れています(?) timeEnd
(上記のように、宣言ステートメントでそれらを初期化しない限り)。
何を与える?