C++ 调用GetSystemTime()函数时出现分段错误(Windows)

C++ 调用GetSystemTime()函数时出现分段错误(Windows),c++,windows,C++,Windows,我在处理分割错误时遇到问题。以下健全性检查抛出一个: #include <windows.h> int main() { LPSYSTEMTIME startTime; GetSystemTime(startTime); } #包括 int main() { LPSYSTEMTIME开始时间; GetSystemTime(startTime); } 然而,我在一个大得多的程序中使用了相同的代码,它运行起来没有问题。我尝试在不同的地方添加延迟,以防问题源于GetSy

我在处理分割错误时遇到问题。以下健全性检查抛出一个:

#include <windows.h>
int main()
{
    LPSYSTEMTIME startTime;
    GetSystemTime(startTime);
}
#包括
int main()
{
LPSYSTEMTIME开始时间;
GetSystemTime(startTime);
}
然而,我在一个大得多的程序中使用了相同的代码,它运行起来没有问题。我尝试在不同的地方添加延迟,以防问题源于
GetSystemTime()
中的某种多线程,但它没有解决问题


我在代码块中使用MinGW GCC进行编译。

LPSYSTEMTIME
是指向
SYSTEMTIME
结构的指针。您没有初始化指针,因此它指向场景的某个地方,因此存在访问冲突/seg错误


为了使代码正常工作,必须确保指针指向有效的
SYSTEMTIME
结构。根据,Microsoft明确警告您,为指针传递NULL将导致访问冲突。

LPSYSTEMTIME
是指向
SYSTEMTIME
结构的指针。您没有初始化指针,因此它指向场景的某个地方,因此存在访问冲突/seg错误


为了使代码正常工作,必须确保指针指向有效的
SYSTEMTIME
结构。根据,Microsoft明确警告您,为指针传递NULL将导致访问冲突。

您使用的是未初始化的指针。这样做效果更好:

#include <windows.h>
int main()
{
    SYSTEMTIME startTime;
    GetSystemTime(&startTime);
}
#包括
int main()
{
系统时间开始时间;
GetSystemTime(&startTime);
}

您正在使用未初始化的指针。这样做效果更好:

#include <windows.h>
int main()
{
    SYSTEMTIME startTime;
    GetSystemTime(&startTime);
}
#包括
int main()
{
系统时间开始时间;
GetSystemTime(&startTime);
}

LPSYSTEMTIME
是指向
SYSTEMTIME
的指针,但尚未初始化

请尝试以下方法:

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

LPSYSTEMTIME
是指向
SYSTEMTIME
的指针,但尚未初始化

请尝试以下方法:

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

LPSYSTEMTIME是指针,您需要分配内存或在LPSYSTEMTIME中释放LP并调用函数,如中所示:

SYSTEMTIME startTime;
GetSystemTime(&startTime);

LPSYSTEMTIME是指针,您需要分配内存或在LPSYSTEMTIME中释放LP并调用函数,如中所示:

SYSTEMTIME startTime;
GetSystemTime(&startTime);

要使用LPSYSTEMTIME,应编写以下内容:

SYSTEMTIME  systemTime; //allocation of memory
printf("%p\n", &systemTime.wDay); // we can see address of wDay for example.
LPSYSTEMTIME st = &systemTime;
GetSystemTime(st);
printf("%d \n", st->wDay);  //display result 
printf("%d \n", (*st).wDay); //display the same result

要使用LPSYSTEMTIME,应编写以下内容:

SYSTEMTIME  systemTime; //allocation of memory
printf("%p\n", &systemTime.wDay); // we can see address of wDay for example.
LPSYSTEMTIME st = &systemTime;
GetSystemTime(st);
printf("%d \n", st->wDay);  //display result 
printf("%d \n", (*st).wDay); //display the same result

谢谢我真的不喜欢微软为每件事定义一个不同的名字——这只会让每件事变得更加混乱。一般来说,当你看到LP时,他们指的是长指针。。。(历史悠久)。通常,如果从类型中剥离LP,则堆栈上具有分配存储的实际结构。。。e、 g.
SYSTEMTIME
,然后您就可以通过
启动时间了
谢谢。我真的不喜欢微软为每件事定义一个不同的名字——这只会让每件事变得更加混乱。一般来说,当你看到LP时,他们指的是长指针。。。(历史悠久)。通常,如果从类型中剥离LP,则堆栈上具有分配存储的实际结构。。。e、 g.
SYSTEMTIME
,然后您将通过
&startTime