extlpf 发表于 2012-9-14 01:14:11

夜深人静了做一道C语言题吧

本帖最后由 extlpf 于 2012-9-14 01:16 编辑

GCC能否编译通过下面的C程序?如果可以,运行结果是什么?为什么?很简单哦~

int main() {
    (*(void(*)(void))0)();
}

hslx111 发表于 2012-9-14 10:08:51

在linux下验证了一下,编译肯定是能过的,但是跑起来就段错误了,内存越界了.

callmesb 发表于 2012-9-14 15:20:56

{:5_150:}略牛。。。看不懂

feiyu 发表于 2012-9-14 22:44:38

@
{:6_190:}更看不懂……

vazor 发表于 2012-9-15 01:08:28

其实就是调用函数指针入口地址为0的函数而已,只是有个强制地址类型转换
typedefvoid (*pfunc) (void);
(*(pfunc)0) ();

maxOrder石 发表于 2012-9-15 01:20:26

vazor 发表于 2012-9-15 01:08 static/image/common/back.gif
其实就是调用函数指针入口地址为0的函数而已,只是有个强制地址类型转换
typedefvo ...

是不是1楼的内存越界,是因为访问了不该访问的位置?

vazor 发表于 2012-9-15 11:19:59

maxOrder石 发表于 2012-9-15 01:20 static/image/common/back.gif
是不是1楼的内存越界,是因为访问了不该访问的位置?

其实这段程序显然不能在一般电脑上执行的,因为指针地址为0其实就是NULL,NULL是受保护的。这个程序应该是针对某种嵌入式或特定机器而写出来。

maxOrder石 发表于 2012-9-15 12:21:30

vazor 发表于 2012-9-15 11:19 static/image/common/back.gif
其实这段程序显然不能在一般电脑上执行的,因为指针地址为0其实就是NULL,NULL是受保护的。这个程序应该是 ...

谢大神指点!{:6_170:}

tom1990 发表于 2012-10-25 23:32:07

杨峰老师好像教过的吧。。。。。可惜还是不会~~~哭过~~~~~~~~~~~~~
页: [1]
查看完整版本: 夜深人静了做一道C语言题吧