无法修改 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;
当你用完它来释放它指向的存储空间。
为了学习数据结构,我为堆栈制作了这个 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;
当你用完它来释放它指向的存储空间。