在 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
。
#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
。