Assert 断言的重要性

 

话说内存的动态使用真是C/C++的一门学问哪,没有了指针和动态内存的使用不知道C/C++

会失色多少。当然了,这也是叫人头疼的东西。当然了有一个很重要的东西可以在一定程度上防止问题的出现:那就是比IF语句判定更加有效的东西ASSERT宏:

 

编成中的感悟,拿合并两个有序数组来说明吧:

 

#include "iostream.h"

#include "stdio.h"

#include "assert.h"

#include "stdlib.h"

int * Merge( int s1[],  int s2[], int s1Len, int s2Len)

{

       assert(s1!=NULL && s2!=NULL);

       int *p1, *p2, *p3, *s3;

       p1 = s1;

       p2 = s2;

       s3 = (int*) malloc (sizeof(int)*(s1Len + s2Len));

       p3 =s3;

       if (s3==NULL)

       {

              printf("ERROR on S3 = NULL!");

              //虽然有这么一句,但是有时显示不出来!这时间Assert就重要了!

              return NULL ;

       }

       assert(s3!=NULL);

      

      

       while (s1Len>0 && s2Len>0)

       {

              if (*p1 <= *p2)

              {

                     *p3 =*p1;

                     p1++;

                     p3++;

                     s1Len--;

              }

              else if (*p1 > *p2)

              {

                     *p3 = *p2;

                     p2++;

                     p3++;

                     s2Len--;

              }

       }

      

      

      

       while (s1Len > 0)

       {

              *p3 = *p1;

              p3++;

              p1++;

             

              s1Len--;

             

       }    

       while (s2Len > 0)

       {

              *p3 = *p2;

              p3++;

              p2++;

             

              s2Len--;

             

       }    

      

       return s3;

      

}

第一出是防止函数的入口错误,跟林锐学来的^_^!

然后么就是重点了:

if (s3==NULL)

       {

              printf("ERROR on S3 = NULL!");

              //虽然有这么一句,但是有时显示不出来!这时间Assert就重要了!

              return NULL ;

       }

其实就是s3NULL也不是一定就显示出来,奇怪把,不欣可以在这句前面加个

S3 = NULL .这时   assert(s3!=NULL);起到了最后保证的一个功能。提示错误。

否则就是提示什么XXX内存是不可读的(就VC6.0来说)。

这里还有就是明明是if (s3==NULL) 如果不小心写成if (s3=NULL)

这时assert几乎成了最后改正的机会,否则那个地方错都不知道!

 

好了感想写到这里了,最近压力大啊。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值