问题: 用一条语句让程序崩溃?
面试官答案: 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取个随机的指针数值变着玩
文章出处:DIY部落(http://www.diybl.com/course/3_program/vc/vc_js/20090302/156551.html)