gpt4 book ai didi

c - 空指针取消引用不会在 VS2010 Windows 应用程序中导致段错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:00 25 4
gpt4 key购买 nike

我有一个正在开发的控制台应用程序,它具有我以前从未见过的行为:NULL 指针取消引用不会导致 SEGFAULT 或任何类型的异常。调试器的输出窗口中甚至没有打印任何内容,这表明根本没有生成异常。

我有执行以下操作的代码:

uint32_t *pointer = NULL;
*pointer = 5;

指针肯定全为零(我已经打印出来,在调试器中检查它,将它与零进行比较,等等)。

这绝对不会导致任何不愉快的事情发生,它会愉快地跨过它。我转到异常对话框并打开“中断所有抛出的异常”,但仍然没有。我知道空指针引用是未定义的,但我到目前为止的经验是 Visual Studio 项目捕获这些,特别是在调试器中。

我高度怀疑我有一些编译器设置被摆弄了,但我不知道那可能是什么设置。它应该是一个沼泽标准的原生控制台应用程序,但项目设置一直在实习生的控制下......

这是 VS2010 旗舰版,windows7-64 位,控制台应用程序。我认为它是 win32,但它可能是 64 位。

无论如何,有人知道我明天到办公室的时间吗?

最佳答案

好吧,我觉得自己有点傻,但我松了一口气,我没有疯。

显然,Windows7 运行时环境只封锁了虚拟内存空间的前 64KB,而我指向的结构元素超过了 64K,所以

  struct MyStruct
{
unsigned char Filler[64*1024];
unsigned int MyMemberPast64KB;
};

struct MyStruct *pStruct=NULL;
pStruct->MyMemberPast64KB = 2;

不会导致异常。这是一个不便的巧合,当未传递命令行参数时,我的类中唯一使用的元素是状态变量,这些变量恰好在一些非常大的工作缓冲区之后声明。

关于c - 空指针取消引用不会在 VS2010 Windows 应用程序中导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31689084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com