Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamic Stack Memory Reallocation

I'm fairly new to C++ and new to pointers as well. I'm currently working on a stack and was trying to reallocate the memory for the stack as the size of the stack reaches the top however, I'm running into issues. I've already done a lot of research both on Google and stack overflow and have found some information helpful but since I'm so new to stacks and C++ I'm still having issues. I was hoping some bright and intelligent people could at least point me in the right direction.

now... Here's my code.

#include <iostream>
#define STACKMAX 20
using namespace std;

template <class T> class StackTemplated {
private:
    int top;
    T   values[STACKMAX];
public:
    StackTemplated();
    void    push(T i);
    T       pop(void);
    bool    empty(void);
 }; 


template <class T> StackTemplated<T>::StackTemplated() {
    top = -1;
}

template <class T>void StackTemplated<T>::push(T i) {
if (top == STACKMAX - 1) {

    // reallocate top of stack. (this is the area I'm having issues)
    char * string1;
    string1 = (char *)calloc(STACKMAX, sizeof(char));

        if (top == STACKMAX - 1) {
            cout << "The stack didn't re-allocate.";
            exit(1);
        }

} else {
    top++;
    values[top] = i;
}
}   

 template <class T> T StackTemplated<T>::pop(void) {
if (top < 0) {
    printf("%", "Stack underflow!");
    exit(1);
} else {
    return values[top--];
}
}   

template <class T> bool StackTemplated<T>::empty() {
return (top == -1);
}
like image 444
Paul Avatar asked May 01 '26 03:05

Paul


1 Answers

Here's a list of a few things I noticed:

  • STACKMAX is a constant. If you're expanding the stack, how will you keep track of how big it currently is?
  • The values member is a fixed-size array. You won't be able to change the size of it dynamically without changing how this is declared and allocated.
  • calloc() allocates a new chunk of memory with the number of bytes you specify. You'll need to somehow copy the existing stack into the new memory block, and free the previous one.
  • You're allocating only STACKMAX bytes in the call to calloc(). You'll probably want to scale this by sizeof T, in case T is not a char.

There will be a lot of details for you to fix up once you address these major points. Good luck.

like image 60
Greg Hewgill Avatar answered May 03 '26 19:05

Greg Hewgill



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!