#include <stdio.h>
int main() {
char *ptr;
while(1){
++ptr;
printf("%p\n", ptr);
}
return 0;
}
问题:你的代码应该递增一个指向 heap, by 1 byte, 重复,直到程序崩溃。
我试图通过遍历堆栈中的所有地址来创建段错误,一次一个字节。但是,代码只是继续运行,不会导致段错误。我怎么能改变它导致段错误?
最佳答案
要获取指向堆栈的指针,请将其设置为局部变量的地址:
int main() {
int object;
int *p = &object;
但是,简单地递增指针不会导致段错误。要获得段错误,您需要取消引用无效指针。所以循环应该是这样的:
while(1) {
++ptr;
printf("%p %d\n", ptr, *ptr);
}
尝试打印 *ptr
最终会导致错误。
对于堆,您可以类似地执行此操作,但通过调用 malloc()
而不是局部变量的地址来初始化 p
。
关于在 C 中导致段错误 |堆栈虚拟内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46943483/