知秋一叶

日出而作,日入而息,凿井而饮,耕田而食,帝力何有于我哉
随笔 - 55, 评论 - 311, 引用 - 79

导航

工具

标签

每月存档

广告



访客

 
  • printf与程序安全:

          学过半小时以上C程序设计的人都知道怎么用printf。如此简单的函数,用的不对,同样会造成严重的安全问题。例如下面一段代码:

          void Output(const char* str)  {

                    printf(str);   /* 还是printf(“%s“, str); ? */

          }

       答案是printf("%s", str);。试想,如果输入的str是“%d“的情况下,前一种调用会输出什么?当然不会是"%d",而是调用堆栈上的某个数字。通过更巧妙的输入,输出结果就甚至可能是当前调用堆栈的返回地址等重要信息,这些信息可能被用作其他威胁系统安全的用途。

  • CComBSTR,内存泄漏:

       ATL提供的CComBSTR极大便利了COM程序设计中BSTR字符串的使用。但是使用不当则可能造成内存泄漏。例如,CComBSTR提供了通过取地址到BSTR*的隐式类型转换:

        CComBSTR outstr;

        SomeFunctionReturnsABSTR(&outstr);   //signature: SomeFunctionReturnsABSTR(BSTR* retval);

       但是由于&操作符函数(operator&)不能获知当前操作中BSTR*的用途,具体地说,是用于输入字符串(In parameter)还是输出字符串(Out parameter),它也就不能适时的释放当前字符串占用的内存。例如下面的代码就会造成内存泄漏:

        CComBSTR outstr = “I'm a Happy BSTR“;

        //if outstr is assigned to another string value in this function, memory is leaked.

        SomeFunctionReturnsABSTR(&outstr); 

相关文章

Loading...

打印 | 张贴于 2003-11-16 06:32:00 | Tag:.NET

留言反馈

#re: 于细微处 编辑
请问一下:BSTR *str如何给str赋值
2005-04-07 12:06:00 | [匿名用户:xhg]
#回复: 于细微处 编辑
有一个小问题:
我用.net做一个MDI程序,
调用子窗体时,如果子窗体没有RichTextBox时多开几个子窗体关闭就特别慢!
但是一加上RichTextBox就没有任何问题!为什么???
很菜但是希望知秋一叶能看看,谢谢了!
2004-04-11 23:19:00 | [匿名用户:Firestone2003]
#回复: 于细微处 编辑
1
2004-01-11 06:42:00 | [匿名用户:1]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode MVC Blogger System