[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