2013-07-31 88 views
0

我在處理分段錯誤時遇到問題。以下完整性檢查拋出一個:調用GetSystemTime()函數時出現分段錯誤(Windows)

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

不過,我使用相同的代碼在一個更大的計劃,並且它運行沒有問題。我曾嘗試在各個地方添加延遲,以防發生問題來自GetSystemTime()內的某種多線程,但並未解決問題。

我正在用CodeBlocks中的MinGW-GCC進行編譯。

回答

4

LPSYSTEMTIME是指向SYSTEMTIME結構的指針。您不初始化指針,因此它指向某處的景物,因此訪問衝突/ seg錯誤。

爲了使代碼正常工作,您必須確保指針指向有效的SYSTEMTIME結構。根據MSDN docs,Microsoft明確警告您,指針傳入NULL將導致訪問衝突。

+1

感謝。我真的不喜歡微軟爲所有事情定義一個不同的名字 - 這隻會讓一切變得更加混亂。 – IanPudney

+1

一般來說,當你看到LP時,他們的意思是長指針......(長是歷史的)。一般情況下,如果你從一個類型中去掉LP,你就得到了在堆棧中有分配存儲的實際結構。 'SYSTEMTIME',那麼你會傳遞'&startTime' – mark

4

您正在使用未初始化的指針。這工作得更好:

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

LPSYSTEMTIME是一個指向SYSTEMTIME,但它尚未初始化。

試試這個:

SYSTEMTIME startTime = { 0 }; 
GetSystemTime(&startTime); 
3

LPSYSTEMTIME是一個指針,你需要或者分配內存,或者您需要寬鬆的LPSYSTEMTIME的LP和調用函數中:

SYSTEMTIME startTime; 
GetSystemTime(&startTime);