• 当Visual Studio中win32控制台应用程序的注释也会生产代码时……


    今天在VS2008中发现了超级令人抓狂的问题,经试验发现在VS2010中有同样的问题存在。

    重现问题——

    在VS2008中新建C++的“win32控制台应用程序”项目,并添加对MFC类库的引用。

    在_tmain函数前加上如图所示的注释,然后在主函数中随便写上几句代码,并设置断点,整个代码如图。

    最后在debug模式下,按F5运行,结果,程度在第二个断点处没有停住,而是直接运行过去!!

    经过反复的试验——包括删除ncb文件,重启VS,重启电脑……忽然想到《Exceptional C++ Style》中有提到注释可能对代码产生影响,比如 “//?” 会被转换成 “\”,结果使第二行代码失效了!!

    难道这里也是因为注释的问题?于是将_tmain()前的注释去掉后,果然,断点的功能居然又回来了!!

     注释掉的代码也会对程序的调试产生影响!!为了弄明白这个问题,本人接下来查看了其生成的汇编代码——即程序运行到第一个断点处时,调出反汇编窗口,如图

    明明是好好的一段注释代码,但微软的VS编译器,硬是在其中加了一堆代码。本人现在才开始学win32下的汇编,只知道ebp,esp是用在函数调用时传递参数用的。

    在已经被注释掉的代码却生成了目标代码,虽然没有对程序的结果造成直接影响(该执行的地方都正常运行了,上面的程序可以正常输出1),但不能在调试时查看断点,最令人揪心的是不知这些多余的代码何时会产生更大的影响。并且发现对已经注释掉的结构体里的内容进行修改后(比如添加或减少几个字段的申明),也会影响代码的生成……

    当本人花了几个小时找出这个问题后,心情依然沉重,结果是现在不敢在VC++中使用 // 风格的注释了(上面的注释掉成/* */后就没问题),并且尝试了其它可能出现问题的情况。

    最后,自己重新建立项目,并且所有的代码都自己敲上去,发现一切OK。原来~~原来,上面那段注释过的代码是同事用QQ发给我的!!!!而QQ对话框中的换行和VS中的转行编码不一样,于是就出现了上面这种注释掉的代码会对程序产生影响的情况~~   QQ~~

     
    分类: IT杂项

    本人在工作上使用C/C++一年多的时间了,对C++的内存泄漏有着一些自己的看法。

    用普通方式new出来的内存,用boost的shared_ptr智能指针可以说很好的完成。而二维、多维数组,boost也有提供支持,而本人的TwoDimesionArray<T> 也提供了很好的实现。

    可对于一些隐式的申请资源,却没有比较的解决方案。比如MFC中的创建的句柄得释放,用fopen打球的文件指针得释放,openCV中用cvCreateImage创建的图像得释放。这时就不能用MFC的智能检测工具,或者boundscheck之类的工具帮助我们了。

    现在,个人觉得对于这种情况,最好的方法就是在源代码级别进行代码分析,找出那些只有"create",而没有"release"的代码。

    这就得实现一个简单的C++编译系统,不过现在应该有比如成熟的方法或者库来进行这个工作。就把这个项目放入自己“待实现的程序”这一栏中吧~~

     
    分类: C/C++
    标签: 待实现
  • 相关阅读:
    《汇编语言》(王爽)课后答案
    宝石迷阵-2019头条笔试题
    变量名拆分 -头条2019笔试题
    幸存者游戏, 数字对生成树, 飞机最低可俯冲高度,整理书架 -paypal笔试题2019
    括号序列, 避嫌抢劫-拼多多笔试题
    趣味字母卡片-拼多多笔试题
    爱健身的小王, 修改矩阵,最长上升子串 -美团2019笔试题
    机器人跳跃问题和毕业旅行-头条2019笔试题
    特征提取-头条2019笔试题
    疏散人群-京东2019笔试题
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2741257.html
Copyright © 2020-2023  润新知