在 C 中导致段错误 |堆栈虚拟内存

Causing a seg fault in C | Heap stack virtual memory

#include <stdio.h>

int main() {
  char *ptr;

  while(1){ 
    ++ptr; 
    printf("%p\n", ptr); 
  }
  return 0;
}

问题:您的代码应该递增一个指向 heap, 1 byte, 重复, 直到程序崩溃.

我正在尝试通过遍历堆栈中的所有地址来创建段错误,一次一个字节。但是,代码只保留 运行 而不会导致分段错误。我怎么能改变它导致段错误?

要获取指向堆栈的指针,请将其设置为局部变量的地址:

int main() {
    int object;
    int *p = &object;

但是,简单地递增指针不会导致分段错误。要获得分段错误,您需要取消引用无效指针。所以循环应该是这样的:

    while(1) {
        ++ptr;
        printf("%p %d\n", ptr, *ptr);
    }

尝试打印 *ptr 最终会导致错误。

对于堆,你可以做类似的事情,但是通过调用 malloc() 而不是局部变量的地址来初始化 p