[技术| 编程·课件·Linux] 夜深人静了做一道C语言题吧

extlpf · 发布于 2012-09-14 01:14 · 1493 次阅读
613
本帖最后由 extlpf 于 2012-9-14 01:16 编辑

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

[C] 纯文本查看 复制代码
int main() {
    (*(void(*)(void))0)();
}

共收到 8 条回复
hslx111 · #2 · 2012-9-14 10:08:51  回复 支持 反对
在linux下验证了一下,编译肯定是能过的,但是跑起来就段错误了,内存越界了.
callmesb · #3 · 2012-9-14 15:20:56  回复 支持 反对
略牛。。。看不懂
feiyu · #4 · 2012-9-14 22:44:38  回复 支持 反对
@
  更看不懂……
vazor · #5 · 2012-9-15 01:08:28  回复 支持 反对
其实就是调用函数指针入口地址为0的函数而已,只是有个强制地址类型转换
[C] 纯文本查看 复制代码
typedef  void (*pfunc) (void);
(*(pfunc)0) ();

点评

答对了,呵呵~  发表于 2012-9-15 21:29
是不是1楼的内存越界,是因为访问了不该访问的位置?  详情 回复 发表于 2012-9-15 01:20

评分

参与人数 1学分 +1 收起 理由
extlpf + 1 赞一个!

查看全部评分

maxOrder石 · #6 · 2012-9-15 01:20:26  回复 支持 反对
vazor 发表于 2012-9-15 01:08
其实就是调用函数指针入口地址为0的函数而已,只是有个强制地址类型转换
[mw_shl_code=c,true]typedef  vo ...

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

点评

其实这段程序显然不能在一般电脑上执行的,因为指针地址为0其实就是NULL,NULL是受保护的。这个程序应该是针对某种嵌入式或特定机器而写出来。  详情 回复 发表于 2012-9-15 11:19
vazor · #7 · 2012-9-15 11:19:59  回复 支持 反对
maxOrder石 发表于 2012-9-15 01:20
是不是1楼的内存越界,是因为访问了不该访问的位置?

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

点评

谢大神指点!  详情 回复 发表于 2012-9-15 12:21
maxOrder石 · #8 · 2012-9-15 12:21:30  回复 支持 反对
vazor 发表于 2012-9-15 11:19
其实这段程序显然不能在一般电脑上执行的,因为指针地址为0其实就是NULL,NULL是受保护的。这个程序应该是 ...

谢大神指点!
tom1990 · #9 · 2012-10-25 23:32:07  回复 支持 反对
杨峰老师好像教过的吧。。。。。可惜还是不会~~~哭过~~~~~~~~~~~~~
回帖
B Color Image Link Quote Code Smilies
Command + Enter
快速回复 返回顶部 返回列表