为啥使用 FileTimeToSystemTime() 时程序崩溃了?
Posted
技术标签:
【中文标题】为啥使用 FileTimeToSystemTime() 时程序崩溃了?【英文标题】:Why the program collapsed when using FileTimeToSystemTime()?为什么使用 FileTimeToSystemTime() 时程序崩溃了? 【发布时间】:2013-11-17 18:58:41 【问题描述】:我想把FileTime改成SystemTime,但是程序总是崩溃,为什么?
提前致谢。
FILETIME *Kernel_Time;
HANDLE Process = OpenProcess ( PROCESS_ALL_ACCESS, FALSE, 0);
GetProcessTimes (Process, NULL, NULL, Kernel_Time, NULL);
SYSTEMTIME *Sys_Time;
FileTimeToSystemTime (Kernel_Time, Sys_Time);
【问题讨论】:
您的Kernel_Time
指针需要指向一个有效的FILETIME
结构。目前只是一个指针。
对了,什么是“折叠”?访问冲突?描述问题时请尽可能具体。
您是否在调试器下运行?如果您使用的是 IDE,请尝试查找“Run > Run with Debugging”或“Debug > Run”菜单项,或类似的内容。它的名称可能会根据您使用的程序而改变。然后,IDE 将在发生异常时暂停您的程序。
那么你将不得不使用the command-line debugger.(Erk。你这样做很难!)尝试下载一个好的Windows C++ IDE,例如Visual C++(Express 是免费的,你可能想要 Express 2013 for Windows Desktop)或C++ Builder(不幸的是,没有免费版本,但在构建用户界面方面比 VC++ 好得多。)
@David M 感谢您的建议;我想我会尝试一些适用于 C/C++ 的 IDE。 :-)
【参考方案1】:
您不会为结果分配内存。在堆栈上分配它可能更容易,并像这样在函数调用中使用地址:
FILETIME Kernel_Time;
HANDLE Process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 0);
GetProcessTimes(Process, NULL, NULL, &Kernel_Time, NULL);
SYSTEMTIME Sys_Time;
FileTimeToSystemTime(&Kernel_Time, &Sys_Time);
【讨论】:
【参考方案2】:您对OpenProcess
的呼叫失败:
如果指定的进程是系统进程(0x00000000),则函数失败,最后的错误码是ERROR_INVALID_PARAMETER。
您应该考虑检查返回值。您的应用程序崩溃了,因为您将随机指针 (Sys_Time
) 传递给 FileTimeToSystemTime
和 Kernel_Time
到 GetProcessTimes
。
对于每次调用,您都需要分配内存。在这种情况下,自动变量就足够了:
FILETIME Kernel_Time = 0 ;
...
GetProcessTimes( Process, NULL, NULL, &Kernel_Time, NULL );
【讨论】:
以上是关于为啥使用 FileTimeToSystemTime() 时程序崩溃了?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在参数周围使用 /*、*/ 以及为啥在提取数组长度时使用 >>>? [复制]
为啥我们使用 hadoop mapreduce 进行数据处理?为啥不在本地机器上做呢?
为啥 CoreGui Roblox 锁定在 DataModel 中,为啥受信任的用户不能使用 CoreScripts?