一次找工作时,面试官问我前面的一个问题,她没答出来,我也不会,最后面试官说了答案。
问题: 用一条语句让程序崩溃?
面试官答案: int *p=0; *p=1;
今天突然记起这个问题,上网一搜找了一些答案。
1.int *p=0; //p指向了系统专用区了
*p=1; //不能修改其内容
//使用非法内存和指针都这样
a. *(int*)0x0 = 0;
b. int * lp = (int *)0x80000000;
*lp = 0;
2.void f() //不明白啊
{
throw;
}
3.void f()//无穷递归
{
f();
}
//类似的例如死循环都可以
struct A
{
A(){new A;}
};
int main ()
{
A a;
return 0;
}
4.char * pStr = "12345";
*(pStr + 2) = 'd'; //修改字符串常量
总结:
几个核心重点:1堆满 2栈溢出 3指向内核代码区的指针内容操作 4数组指针的一切非法操作
几个主要方式:1无穷递归 2强制类型转换(隐式也可) 3狂NEW或狂DELETE 4取个随机的指针数值变着玩
参考文章:http://topic.csdn.net/u/20081027/23/dfbb554c-2593-462a-9698-5ba4b7f48e36.html