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