| | 文章目录:返回首页--职业助手--附VIA笔试出错题目的讨论
附VIA笔试出错题目的讨论 struct node { char *item; struct node *next } // 没有; main() { } 这是VIA中国的一道笔试题目, 里面说会发生core dump, 我由于当时没有认真看题目, 没有看到;漏掉, 所以就怀 疑是里面一些错误的使用导致, 尤其是char *item这种使 用方式, 使用不当非常容易出错误. 后来一个面视人员说这个是因为main的返回值成了struct 所以才出现错误, 并让我回去看c的启动代码, 因为DOS 和Win32时代的启动代码我都看过, 所以愈发白思不得其 解. 据我了解, 启动代码除了作一些初始化操作(环境变量和 command line等等)之外不管main函数怎么声明, 实际上 总是按照 int main(int argc, char *argv[])的方式完 成调用, 对返回的结果(AX/EAX寄存器)除了转储之外没有 做任何其他处理. 那么, 到底这样使用main会不会core dump, 如果core dump 原因又在什么地方呢? Penrose/RoachCock/Peach/Flier等帮着看看. btw: 希望大家不要面试VIA, 其中一个面试的傻B居然认为 我为了兴趣放弃原来专业是对原来单位的背叛. 要知道 我的专业和学校到我去上学之前我一无所知(全是老师一手 操办, 而且他非常希望我上完高三后上清华, 自己主要考虑 到家庭状况才...的), 没想到这点居然成了别人说三道四的 把柄, 而且这种评价我也是第一次听说, 真是活见鬼. 牢骚一番, hehe. -- 远山凝眉黛 玉水绕边城 且借元章笔 妙手绘丹青 ※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.120.224.18] 发信人: peach (呆呆), 信区: Programming 标 题: Re: 这样的一段程序会产生Core Dump(或者是GPF)? 发信站: BBS 水木清华站 (Wed Nov 28 13:29:13 2001) debug版本和release版本都没有问题啊 实在看不出问题来 至少win32下是没有问题的 unix/linux下如何不清楚 有些人的观点是很无聊的,总觉得自己如何如何,看谁也不顺眼,对别人抓着个把柄就 说这说那的,这种人不理也罢 【 在 laoduan (laoduan) 的大作中提到: 】 struct node { char *item; struct node *next } // 没有; main() { } 这是VIA中国的一道笔试题目, 里面说会发生core dump, 我由于当时没有认真看题目, 没有看到;漏掉, 所以就怀 疑是里面一些错误的使用导致, 尤其是char *item这种使 用方式, 使用不当非常容易出错误. 后来一个面视人员说这个是因为main的返回值成了struct 所以才出现错误, 并让我回去看c的启动代码, 因为DOS 和Win32时代的启动代码我都看过, 所以愈发白思不得其 解. 据我了解, 启动代码除了作一些初始化操作(环境变量和 command line等等)之外不管main函数怎么声明, 实际上 总是按照 int main(int argc, char *argv[])的方式完 成调用, 对返回的结果(AX/EAX寄存器)除了转储之外没有 做任何其他处理. 那么, 到底这样使用main会不会core dump, 如果core dump dump, 如果core dump 原因又在什么地方呢? Penrose/RoachCock/Peach/Flier等帮着看看. btw: 希望大家不要面试VIA, 其中一个面试的傻B居然认为 我为了兴趣放弃原来专业是对原来单位的背叛. 要知道 我的专业和学校到我去上学之前我一无所知(全是老师一手 操办, 而且他非常希望我上完高三后上清华, 自己主要考虑 到家庭状况才...的), 没想到这点居然成了别人说三道四的 把柄, 而且这种评价我也是第一次听说, 真是活见鬼. 牢骚一番, hehe. -- 远山凝眉黛 玉水绕边城 且借元章笔 妙手绘丹青 -- v y v y (o o)(@ @) ( v )( v ) ------------------------------mm-----ww----------------------------------- Y:喜欢我嘛? V:嘻嘻,喜欢 :) Y:那嫁给我吧!好嘛? V:那你替我煮一辈子饭吧! :) Y:咣当当当......... Y:嘿嘿,我可以给你捉一辈子虫子!!! :) ※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.236.99] 发信人: RoachCock (没有昵称), 信区: Programming 标 题: Re: 这样的一段程序会产生Core Dump(或者是GPF)? 发信站: BBS 水木清华站 (Wed Nov 28 23:58:39 2001) 在VC下函数返回结构或者对象的方法是主调函数在堆栈中分配一块内存,并把其地址作 为 形式上(不是顺序上)第一个参数传递给函数,然后函数修改这个内存块来实现返回 node main() 就相当于 void main(node*) node test(int) 相当于void test(node*,int); main里好象没返回什么,所以不会搞坏argc 所指的内存, 否则的话,因为argc 通常是1,2,等小整数,把它当成node*来使用就会出问题 当然,对于非void函数不返回如何处理是是否出问题的关键,看来VC的处理方式do nothing 【 在 laoduan (laoduan) 的大作中提到: 】 : struct node : { : char *item; : struct node *next : } // 没有; : main() : { : } : 这是VIA中国的一道笔试题目, 里面说会发生core dump, : 我由于当时没有认真看题目, 没有看到;漏掉, 所以就怀 : 疑是里面一些错误的使用导致, 尤其是char *item这种使 : ................... -- 没有签名档 ※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.119.199.87] 发信人: laoduan (laoduan), 信区: Programming 标 题: Re: 这样的一段程序会产生Core Dump(或者是GPF)? 发信站: BBS 水木清华站 (Mon Dec 3 12:43:09 2001) 返回的结构还是很小, 在32下面会用EDX:EAX, 16下面用DX:AX返回. 【 在 RoachCock (没有昵称) 的大作中提到: 】 : 在VC下函数返回结构或者对象的方法是主调函数在堆栈中分配一块内存,并把其地址 作为 : 形式上(不是顺序上)第一个参数传递给函数,然后函数修改这个内存块来实现返回 : node main() : 就相当于 : void main(node*) : node test(int) 相当于void test(node*,int); : main里好象没返回什么,所以不会搞坏argc 所指的内存, : 否则的话,因为argc 通常是1,2,等小整数,把它当成node*来使用就会出问题 : 当然,对于非void函数不返回如何处理是是否出问题的关键,看来VC的处理方式do : nothing -- 远山凝眉黛 玉水绕边城 且借元章笔 妙手绘丹青 ※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.120.224.18] 发信人: RoachCock (没有昵称), 信区: Programming 标 题: Re: 这样的一段程序会产生Core Dump(或者是GPF)? 发信站: BBS 水木清华站 (Mon Dec 3 13:17:41 2001) 小的结构不清楚了 大的是这么传的 extern "C" VARIANT __stdcall Test(); 导出的函数名为_Test@4,说明其带有一个四字节的参数,就是返回值的地址 【 在 laoduan (laoduan) 的大作中提到: 】 : 返回的结构还是很小, 在32下面会用EDX:EAX, 16下面用DX:AX返回. -- 没有签名档 ※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.119.199.87]
|
|