从零开始——为面试做准备,代码篇(二)

2014/1/22 刚A到第二题就能接触这么多问题,太棒了,继续加油!


1,C++ 中 bool 变量的默认值是什么?

   bool变量在denug版本中初始值都为true,但是在release版本中就不一定了。

debug版本中,bool变量初始值总为0xcc,显示为整型是204release版本是随机值。以变量声明后最好进行初始化,避免隐藏bug发生。

   其实,其他标准类型的初始化也指向同一地址,如此文(http://www.dewen.org/q/8450/C)中所述:

 

    bool占一个字节,8位,便是0xccint占四个字节,32位,便是0xcccccccc;用cout<<hex<<x;查看下便知,属实。

 

2damage after normal block #92

    内存操作出现问题,例如没有开辟足够内存,或者没有回收垃圾内存。可能由地址越界造成,仔细检查可能出现越界的情况。当然,这里的越界是指可能没有开辟足够的内存,不是数组下标越界,后者由于c/c++编译器开销过大而不进行检测。我的行列循环对矩阵赋值时,把行和列写倒了,造成非方阵赋值时越界。

    一般来说在debug版本的vc程序中,程序会给每块new出来的内存,预留几个字节作为越界检测之用。在释放内存时,会检查这几个字节,判断是否有内存访问越界的可能。

 

3Debug 和 Release 编译方式的本质区别(转载,出处不详)

    Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程

序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度

上都是最优的,以便用户很好地使用。

Debug 和 Release 的真正秘密,在于一组编译选项。

    承接前几日TB的面试题,assert作为调试作用,在release版本中不起作用,所以release版本中并没有assert

    因为Debug的程序里面有调试信息库,调试用堆栈等信息。调试版本的分配内存会事先在内存中初始化,而Release版本就不管了。调试版本包括了每个执行码对应的源代码信息,Release版本去掉了。调试版本的堆栈,比较复杂,如果被破坏会被检查出来,Release版本不检查了。总之,Debug版本容易暴露问题。

 

4freopen的使用,为了不用每次A题的时候都手动把输入用键盘敲一遍,不如将其放在txt文件中,然后直接去读取便可。

freopen(“in.txt”,”r”,stdin);//输入重定向,将从int.txt读取,然后用scanf或者cin,就在in.txt中读了,而不是键盘。

 

5,期间蹦出一个bug,就是程序没错,但是一直在compiling,停不住,直接关窗口也不行,无奈只好关进程,重启。后来发现这是vc6的一个经典bug,很激动有木有~若要改进下载

vs sp6的补丁包(http://download.microsoft.com/download/1/9/f/19fe4660-5792-4683-99e0-8d48c22eed74/Vs6sp6.exe) 不补了,暂时还能用,哈哈。

 

 

PS:杂项(无关编程):

关于word排版,突然出现字符间距过大:

 

那么需要调整:右键->段落->允许西文在段落中间换行即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值