#include <stdio.h>
int main() {
char *ptr;
while(1){
++ptr;
printf("%p\n", ptr);
}
return 0;
}
问题:您的代码应该增加一个指向该指针的指针 堆,重复1个字节,直到程序崩溃。
我试图通过迭代堆栈中的所有地址来创建段错误,一次一个字节。但是,代码只是保持运行并且不会导致分段错误。我怎么能改变它导致段错误?
答案 0 :(得分:0)
要获取指向堆栈的指针,请将其设置为局部变量的地址:
int main() {
int object;
int *p = &object;
但是,简单地递增指针不会导致分段错误。要获得分段错误,您需要取消引用无效指针。所以循环应该是:
while(1) {
++ptr;
printf("%p %d\n", ptr, *ptr);
}
尝试打印*ptr
最终会导致错误。
对于堆,您可以类似地执行此操作,但通过调用p
而不是局部变量的地址来初始化malloc()
。