gpt4 book ai didi

c++ - 动态堆栈内存重新分配

转载 作者:太空狗 更新时间:2023-10-29 21:06:28 25 4
gpt4 key购买 nike

我是 C++ 的新手,也是指针的新手。我目前正在处理堆栈,并试图在堆栈大小达到顶部时为堆栈重新分配内存,但是,我遇到了问题。我已经对 Google 和堆栈溢出进行了大量研究,并发现了一些有用的信息,但由于我对堆栈和 C++ 还很陌生,所以我仍然遇到问题。我希望一些聪明聪明的人至少能给我指明正确的方向。

现在...这是我的代码。

#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);
}

最佳答案

这是我注意到的一些事情的列表:

  • STACKMAX 是一个常量。如果您正在扩展堆栈,您将如何跟踪它目前有多大?
  • values 成员是一个固定大小的数组。如果不更改它的声明和分配方式,您将无法动态更改它的大小。
  • calloc() 使用您指定的字节数分配新的内存块。您需要以某种方式将现有堆栈复制到新的内存块中,并释放之前的堆栈。
  • 您在对 calloc() 的调用中仅分配了 STACKMAX 个字节。如果 T 不是 char,您可能希望将其缩放 sizeof T

一旦你解决了这些要点,你就会有很多细节需要解决。祝你好运。

关于c++ - 动态堆栈内存重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7655766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com