[vox-tech] anything wrong with this code?
Chanoch (Ken) Bloom
kbloom at gmail.com
Thu May 27 20:35:09 PDT 2010
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
More information about the vox-tech
mailing list