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

时间:2017-10-25 23:20:40

标签: c memory-management stack heap virtual-memory

#include <stdio.h>

int main() {
  char *ptr;

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

问题:您的代码应该增加一个指向该指针的指针 堆,重复1个字节,直到程序崩溃。

我试图通过迭代堆栈中的所有地址来创建段错误,一次一个字节。但是,代码只是保持运行并且不会导致分段错误。我怎么能改变它导致段错误?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

对于堆,您可以类似地执行此操作,但通过调用p而不是局部变量的地址来初始化malloc()