编程常犯的错误

自己写程序也写了不短的日子了。这个blog就列出来自己遇到的常犯的错误吧。也算是给自己一个记录,一个提醒。

集合中的元素的删除。

for(int i=0; i < container.length; i++){

if(....){

container.delete(i);

}

}

在循环中可能删除多个复合条件的元素。这样的写法就错了。可以改写成

for(int i=container.length; i > 0; i--){

if(....){

container.delete(i--);

}

}



此外就是使用iterator在遍历的时候,直接用容器的delete或者remove方法删除iterator,然后没有跳出循环,继续遍历的话,也是错误的。在java中,可以使用iterator本身的remove。而c++的stl中没有对应的处理办法。如果不使用iterator的remove方法或者不能使用,那么循环中可以考虑如下的写法

for(Iterator iter = container.begin(); iter != container.end(); ){

if(...){

Iterator tmpIter = iter;

tmpIter++;

container.remove(iter);

iter = tmpIter;

}

else{

iter++;

}

}

C/C++ 中分配内存

void AllocSpace(char *p){

p = new char[1024];

}

p只是一个局部变量,这样的分配只是导致内存泄露。

完成这个意图的写法可以有两种

char * AllocSpace(){

return new char[1024];

}

或者

void AllocSpace(char **p){

*p = new char[1024];

}



对于delete的误解

char *p = new char[1024];

delete p;

if(NULL != p){

}

delete(free) 只是释放指针指向的内存,并不会使得指针本身的值为NULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值