C/C++/C#面试题精选(3)

发表于:2011-8-25 09:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:何海涛    来源:51Testing软件测试网采编

  问题(21):C#是一门托管语言,那么是不是说明只要用C#,就能保证不会出现内存泄露和其他资源泄漏?如果不是,在哪些情况下可能会出现泄漏?

  答案:C#不能保证没有资源泄漏。比如如下几种情况可能会造成资源泄漏:(1) 调用Nativecode,比如用P/Invoke或者调用COM;(2) 读写文件时的,没有及时closestream, 或者ADO.NET连数据库时,没有及时关闭连接,也算资源泄漏?(3)注册事件后没有remove,导致publisher和subscriber的强依 赖,垃圾回收可能会被推迟;(4).NET还定义了一些方法直接申请非托管内存,比如Marshal.AllocHGlobal和Marshal.AllocCoTaskMem。通过这种方式得到的内存,如果没有及时释放,也会造成内存泄露。

  问题(22):下面的两段C#有哪些不同?

  • static void CatchException1()  
  • {  
  •     try  
  •     {  
  •         Function();  
  •     }  
  •     catch  
  •     {  
  •         throw;  
  •     }  
  • }  
  •   
  • static void CatchException2()  
  • {  
  •     try  
  •     {  
  •         Function();  
  •     }  
  •     catch (Exception e)  
  •     {  
  •         throwe;  
  •     }  
  • }
  •   答案:两个函数的catch都是重新抛出截获的exception,但抛出的exception的callstack是不一样的。对于第一种方法,exception的callstack是从最开始的抛出地点开始的。对于第二种方法,exception的callstack是从CatchException2开始的,最初抛出的地方相关的信息被隐藏了。

      问题(23):运行下图中的C++代码,打印出的结果是什么?

  • bool Fun1(char* str)  
  • {  
  •     printf("%s\n",str);  
  •     return false;  
  • }  
  •   
  • bool Fun2(char* str)  
  • {  
  •     printf("%s\n",str);  
  •     return true;  
  • }  
  •   
  • int _tmain(int argc, _TCHAR* argv[])  
  • {  
  •     bool res1,res2;  
  •     res1 = (Fun1("a")&& Fun2("b")) || (Fun1("c") || Fun2("d"));  
  •     res2 = (Fun1("a")&& Fun2("b")) &&(Fun1("c") || Fun2("d"));  
  •   
  •     return res1|| res2;  
  • }
  •   答案:打印出4行,分别是a、c、d、a。

      在C/C++中,与、或运算是从左到右的顺序执行的。在计算rest1时,先计算Fun1(“a”)&& Func2(“b”)。首先Func1(“a”)打印出内容为a的一行。由于Fun1(“a”)返回的是false,无论Func2(“b”)的返回值是true还是false,Fun1(“a”)&& Func2(“b”)的结果都是false。由于Func2(“b”)的结果无关重要,因此Func2(“b”)会略去而不做计算。接下来计算Fun1(“c”)|| Func2(“d”),分别打印出内容c和d的两行。

      在计算rest2时,首先Func1(“a”)打印出内容为a的一行。由于Func1(“a”)返回false,和前面一样的道理,Func2(“b”)会略去不做计算。由于Fun1(“a”)&& Func2(“b”)的结果是false,不管Fun1(“c”)&& Func2(“d”)的结果是什么,整个表达式得到的结果都是false,因此Fun1(“c”) || Func2(“d”)都将被忽略。

    21/212>
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号