c - 64 位 AMD64 模式下的段错误

标签 c segmentation-fault 64-bit

我试图理解以下悖论:

我正在 64 位 Linux 上运行一个程序。那么程序运行在64位模式(AMD64的长模式的子模式)下,对吧? 但这种模式没有分段,只有分页。那么为什么下面的代码会产生段错误呢?

int main() {
  int* ptr = (int*)0xABCDABCDABCD;
  *ptr = 10;
  return 0;
}

最佳答案

被称为段错误,与底层分页技术无关。这意味着(通常)您尝试访问超出您允许的范围(您的段)的内存,它可能被称为 block 、 block 、节、memlim、xyzzy、plugh 或任何 em> 确实如此。

这与在 Java 中遇到 null 指针 异常非常相似,尽管该语言中没有“指针”:-)

早在 Intel 为我们提供原始 x86 芯片的分段架构之前,UNIX 中指示它的信号 (SIGSEGV) 就已经存在了。

关于c - 64 位 AMD64 模式下的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26683088/

相关文章:

c - "mov ds, ax"在 Visual Studio 中显示 0xC0000005 错误

c - 检查字符串是否是c中的数字时出现问题

ios - 将应用程序转换为 64 位时对 typedef 枚举发出警告

c++ - 在 Win7 64 位上因未处理的第一次机会异常而崩溃(在 XP 32 位、Linux 64 位上没有问题)

gcc - 为什么 GCC 在 64 位上会丢弃帧指针?

C++ while 循环优化不能正常工作

c - 在C语言中使用指针有什么好处?

c - fprintf 段错误

c++ - 段错误: 11 c++ when using vector

c++ - 在 gdb 中使用 coredump 时,我如何确切知道哪个线程导致了 SIGSEGV?