- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
考虑这个小程序:
int main(int argc, char *argv[])
{
*((int *) 0) = 1;
return 0;
}
显然,写入 $0 会导致内存访问错误。当使用 Visual C 将此程序编译为 32 位可执行文件并运行它时,Windows 7 清楚地显示程序已崩溃:(德语系统)
然而,当使用 Visual C 将程序编译为 64 位可执行文件时,它只是无声地崩溃。没有弹出系统对话框通知用户程序刚刚崩溃。
这是 x64 二进制文件的正常行为还是我的 Windows 7 配置有问题?我认为操作系统应该在程序崩溃时清楚地向用户显示,而不是默默地杀死它们......
编辑:对于所有声称编译器可能只是优化空指针访问的人来说,这里是程序集。可以看到非法内存访问就在那里,运行程序后在Windows的应用程序日志中也有显示。
; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01
include listing.inc
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
PUBLIC main
; Function compile flags: /Odtp
_TEXT SEGMENT
argc$ = 8
argv$ = 16
main PROC
; File d:\test.c
; Line 2
mov QWORD PTR [rsp+16], rdx
mov DWORD PTR [rsp+8], ecx
; Line 3
mov DWORD PTR ds:0, 1 ; here we go folks
; Line 4
xor eax, eax
; Line 5
ret 0
main ENDP
_TEXT ENDS
END
编辑 2:我还验证了 HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting\DontShowUI
设置为 0。因此 Windows 被明确配置为报告崩溃。但它只对 x86 二进制文件有效,对 x64 二进制文件无效。是的,对于 x64 二进制文件,应用程序日志中报告了崩溃,但错误对话框(参见上面的屏幕截图)仅显示 x86 二进制文件而不显示 x64 二进制文件,尽管 DontShowUI
明确设置为 0。
EDIT 3:我在不同的 Windows 系统上进行了测试。以下是结果:
Windows 7: x86 shows crash dialog, x64 doesn't (as described above)
Windows 8: both x86 and x64 show the crash dialog
Windows 10: neither x86 nor x64 show the crash dialog
所以这里唯一表现不一致的系统实际上是 Windows 7。在所有其他系统上,崩溃对话框显示或不显示,而在 Windows 7 上,x86 和 x64 程序的崩溃之间存在不同的行为。很奇怪。
最佳答案
*((int *) 0) = 1;
的行为,以及您的整个程序,未定义。
各种崩溃是这种未定义行为的表现。
某些编译器可能会将您的代码优化为 int main{}
:gcc 已经在高优化设置上优化未定义的语句已有一段时间了。也许这就是 64 位编译行为的原因?
关于c - 为什么我的 x64 程序在 Windows 上无声地崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52718169/
有谁知道如何使用 JS window.open(...) 但是默默地使用它,即实际上没有打开它,所以打开检查它是否能够打开? 我必须运行脚本来进行弹出 block 检查,我快完成了。我不想让浏览器物理
在一个使用远程通知的 iOS 应用程序(来自 Parse.com)中,在花了一些时间研究这个主题之后,我得出的结论是我不应该在后台使用远程通知或者可能使用静默通知。 但是无声通知看起来相当复杂。 例如
我正在编写一个函数来标准化音频文件。我正在使用 JAudioTagger 库。 我在 Logic Pro X 中创建了一个简短的音频文件,它将完全静音(如果我理解正确的话,mp3 主体的所有字节都应该
如何让 Grunt 运行更安静? 我没有 --verbose选项。我仍然得到一个很长的日志。 我想要一个更短的日志,最好只记录失败的规范。 有什么建议吗? 我正在使用 grunt-karma和 Jas
有没有办法让 Backbone.Model 静默获取?选项 {silent: true} 不适用于模型提取。基本上我想使当前 View 已经监听的同步事件静音。 收听: self.listenTo(s
在我们的应用程序中,用户将在开始工作时打卡。如果用户忘记签退,我们将在签到时间 24 小时后自动为其签退。应用程序可能不会长时间处于事件/后台状态。它可能会被终止。所以我们的想法是发布一个本地通知,通
当我的“chartModel”发生变化时,我想更新“globalModel”。 chartModel.bind("change", updateGlobalModel); updateGlobalMo
我正在将主干版本从 0.9.2 更新到 1.0,但遇到了问题。 模型未正确更新。它有延迟。以前我下面的代码工作得很好: this.model({ attrib: true},{silent:true}
我是一名优秀的程序员,十分优秀!