C++新手经常容易范的两个错误(数组和指针的问题)

1、当数组名作为函数的参数传入时,该参数的sizeof应该等于多少呢?       

        记得刚毕业的那会,经常会遇到这样的笔试题:当数组名作为函数的参数传入时,该参数的sizeof应该等于多少呢?即定义了一定长数组,然后将该数组名作为一个参数调用了一个函数,在该被调用的函数中,对该参数进行sizeof操作,如下所示:

  1. TCHAR achTest[MAX_PATH] = { 0 };  
  2. int nArrSize = sizeof( achTest ); // 此时的sizeof应该等于:MAX_PATH*sizeof(TCHAR)  
  3. ......  
  4. TestFun( achTest ); // 此处调用了TestFun函数  
  5. ......  
  6. void TestFun( TCHAR* pszBuf )  
  7. {  
  8.     int nSize = sizeof( pszBuf ); // 虽然传进来的是数组名,但是此处实际上是一个指针,即sizeof等于4  
  9.     ......  
  10. }  
        今天在对某一工程进行Unicode改造时,遇到一个奔溃的问题,正是对上面的问题不理解引起的:在函数中,对pszBuf进行_stprintf_s操作,结果弹出“Buffer too small”的提示。
 

2、直接将函数中的局部变量out出来供外部使用

      如果是个整型变量,则没什么问题。如果是个类的对象的话,并且作为返回值返回,则会构造一个临时对象,将执行拷贝构造操作,但要保证不涉及到深拷贝,这样也是没问题的。但是如果作为引用或指针,指向的内存可能是在被调用的函数中定义的,比如字符型数组,在函数执行完后内存就被释放了,在函数外部再访问就会出错了。在代码量比较多的时候,可能很难一眼看出来这样的问题,当如果出问题后稍微仔细分析一下就能找到原因,所以遇到类似的情况要慎重一些。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dvlinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值