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/