自己写程序也写了不短的日子了。这个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
评论
发表评论

您还没有登录,请登录后发表评论