Tyler Littlefield wrote:
> Hello list,
> I've got a class defined, with a template, to create a sort of container.
> I'm using a pointer to hold the top element of the container, and with that 
> pointer, I can enlarge or shrink the container with new.
> Now, I've got an add function that works great. What I need to get going, is 
> the remove command.
> My theory is this:
> If I have 20 elements, and it's 0 based, I can remove say element 5, then I 
> would have an empty spot.
> So, with that empty spot, I could shrink the array, by taking element 6, and 
> setting 5 equal to that, 7=6 8=7, etc, until I'm finally left with a blank 
> element at the end, which I could dispose of, by resizing the array and 
> shrinking it to the number of elements in the code.
> apparently this isn't working to well.
> Here's the code; I'm getting an access violation.
> //code:
> BOOL Remove(int elem) {
> 
> if (elem<0||elem>this->size)
> 
> return false;
> 
> //now we do the fun thing, and decompress the container, and then delete 1 
> element from the bottom.
> 
> int i=0;
> 
> for(int counter=++elem;counter++;counter<this->size) {

That line looks seriously problematic.  Increment and comparison appear 
to be swapped...


> i=counter--;
> 
> top[i]=top[counter];
> 
> }
> 
> --this->size;
> 
> this->top=new T[this->size];

Looks like a memory leak.  'new' allocates, 'delete' frees, there is no 
"reallocation" - you are only calling 'new' with no 'delete'.

Looks like an attempt to re-invent the wheel (e.g. std::vector<>, Safe 
C++ Block).  Any particular reason?

-- 
Thomas Hruska
CubicleSoft President
Ph: 517-803-4197

*NEW* MyTaskFocus 1.1
Get on task.  Stay on task.

http://www.CubicleSoft.com/MyTaskFocus/

Reply via email to