无法修改 C++ 数组中的字符串

Can't modify a string in C++ array

为了学习数据结构,我为堆栈制作了这个 class。它对整数工作得很好,但对字符串会抛出一个神秘的错误。 class 列表是我的堆栈的 API。它的意思是在达到限制时自动调整大小。整个代码只是为了学习,但我得到的错误没有任何意义,它发生在某些汇编代码的某个地方。

#include <iostream>
#include<string>
using namespace std;


class List {
private:
    
    int N = 0;
    string* list = new string[1];
    void resize(int sz) {
        max = sz;
        string* oldlist = list;
        string* list = new string[max];
        for (int i = 0; i < N; i++) {
            list[i] = oldlist[i];
        }

    }
    int max = 1;
public:
    void push(string str) {
        if (N == max) {
            resize(2 * N);
        }
        cout << max << endl;
        list[N] = str;
        N++;
    }
    void pop() {
        cout << list[--N] << endl;
    }


};
int main()
{

    string in;
    List list;
    while (true) {
        cin >> in;
        if (in == "-") {
            list.pop();
        }
        else {
            list.push(in);
        }
    }
}

string* list = new string[max];resize 方法中定义了一个名为 list 的新变量,“shadows” 替换了成员变量 list。成员 list 保持不变,局部变量 list 在函数结束时超出范围,丢失所有工作。

修复:更改

string* list = new string[max];

list = new string[max];

这样函数就会使用成员变量。

不要忘记delete[] oldlist;当你用完它来释放它指向的存储空间。