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

标签 c visual-studio-2010 null

我有一个正在开发的控制台应用程序,它具有我以前从未见过的行为: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/

相关文章:

c - 为什么程序返回错误的答案?

visual-studio - VS2010相当于Eclipse的 "Outline"窗口拖动重构

java - SimpleDateFormat.parse(String) 给出 null 值 android

c - 一些指针问题

c++ - 用于编译 C/C++ 项目的远程基于 linux 的机器的工具

C# TCP 客户端在监听服务器和更新 GUI 时遇到问题

swift - 普通类型的变量不能与 nil 进行比较,但文字可以,这是为什么呢?

java - 使数组的元素为空

c - 将数组传递给 C 中的多个函数

.net - *为什么* Visual Studio 不允许您在 GAC 中引用程序集?