【发布时间】:2017-10-25 23:20:39
【问题描述】:
#include <stdio.h>
int main() {
char *ptr;
while(1){
++ptr;
printf("%p\n", ptr);
}
return 0;
}
问题:您的代码应该增加一个指向 堆,1 个字节,重复,直到程序崩溃。
我试图通过迭代堆栈中的所有地址来创建段错误,一次一个字节。但是,代码只是继续运行,不会导致分段错误。我怎么能改变它导致段错误?
【问题讨论】:
-
你永远不会取消引用指针。如果您想要段错误,只需执行
*((int*)0); -
即使没有取消引用,它也是未定义的行为,因为
ptr未初始化。 -
我认为你必须使用
malloc()来使用指向堆的指针。ptr= malloc()在堆上获取想要的内存位置,然后就可以用ptr指针访问堆了。 -
我从您的问题中了解到,您要求的是 2 种不同的东西。您可以指向堆并递增它直到它崩溃,或者您可以指向堆栈上的某个位置并递增它直到它崩溃。你要哪一个?
-
实际上是堆栈和堆
标签: c memory-management heap-memory virtual-memory stack-memory