On Thu, 2010-05-27 at 22:08 -0400, Hai Yi wrote: > hi there: > > can anyone look at these two small c++ snippets to see what's wrong > with them? I was interviewed with them... > > 1. > A* createA(){ return new A();} > void fun(){createA();} > What's wrong with the above code?
It leaks memory. > 2. > for(iter=map.begin();iter!=map.end();iter++){ > erase(iter++); > iter++; > } > anything wrong with the above code? What's happened for "iter++" internally? 1. erase() is a member function of the map class. It is not a free function. A free function named erase() wouldn't know what container to erase the iterator from. 2. The code only works if map.size() is a multiple of 3. If it isn't, then one of the iter++ operations may try to put iter 2 or 3 past the end of the map. If you did this on a raw array, or a vector (whose iterators are usually just pointers to the elements, unless you're in some kind of debug mode), * then the standard doesn't guarantee that you can form the address of the element 2 or 3 past the end of the array, * if you could form that address it would certainly no longer be equal to array.end(), so you'd miss the termination condition. --Ken _______________________________________________ vox-tech mailing list vox-tech@lists.lugod.org http://lists.lugod.org/mailman/listinfo/vox-tech