1

セグメンテーション違反の処理に問題があります。次のサニティ チェックは 1 をスローします。

#include <windows.h>
int main()
{
    LPSYSTEMTIME startTime;
    GetSystemTime(startTime);
}

ただし、はるかに大きなプログラムで同じコードを使用しましたが、問題なく実行されます。問題が 内のある種のマルチスレッドに起因する場合に備えて、さまざまな場所に遅延を追加しようとしましたがGetSystemTime()、問題は解決しませんでした。

CodeBlocks で MinGW-GCC を使用してコンパイルしています。

4

5 に答える 5

4

LPSYSTEMTIMESYSTEMTIME構造体へのポインタです。ポインターを初期化しないため、ポインターは風景のどこかを指しているため、アクセス違反/セグメント違反が発生します。

コードを機能させるには、ポインタが有効なSYSTEMTIME構造を指していることを確認する必要があります。MSDN docsに従って、Microsoft は、ポインターに NULL を渡すとアクセス違反が発生することを明示的に警告しています。

于 2013-07-31T19:41:45.307 に答える
4

初期化されていないポインターを使用しています。これはよりうまく機能します:

#include <windows.h>
int main()
{
    SYSTEMTIME startTime;
    GetSystemTime(&startTime);
}
于 2013-07-31T19:41:58.143 に答える
3

LPSYSTEMTIME はポインタです。メモリを割り当てるか、LPSYSTEMTIME で LP を緩めて次のように関数を呼び出す必要があります。

SYSTEMTIME startTime;
GetSystemTime(&startTime);
于 2013-07-31T19:42:29.303 に答える
2

LPSYSTEMTIMEへのポインタですが、SYSTEMTIME初期化されていません。

代わりにこれを試してください:

SYSTEMTIME startTime = { 0 };
GetSystemTime(&startTime);
于 2013-07-31T19:42:18.847 に答える