有幾個問題:
你不需要任何分配的構造
- 。您甚至不需要構造函數,您可以在聲明它們時直接初始化成員。
- 如果您使用
string* tmpElementsArray = new string[size + 1];
分配,則需要使用delete [] tmpElementsArray
取消分配;
修正後加工的版本:
#include <string>
#include <iostream>
using namespace std;
class StringRow {
private:
string* elements = nullptr;
int size = 0;
public:
// constructor not needed
// StringRow() {
// elements = nullptr;
// size = 0;
// }
~StringRow() {
delete []elements;
}
void push_back(string value) {
string* tmpElementsArray = new string[size + 1];
for (int i = 0; i<size; i++) {
tmpElementsArray[i] = elements[i];
}
delete [] elements;
elements = tmpElementsArray;
elements[size] = value;
size++;
}
int length() {
return size;
}
string at(int index) {
if (index<size) {
return elements[index];
}
}
};
int main()
{
StringRow s;
string str1 = "hello";
string str2 = "hello2";
s.push_back(str1);
s.push_back(str2);
cout << s.at(0) << endl ;
cout << s.at(1) << endl;
}
做一個delete []elements
如果elements
是nullptr
正常。
注意:這不是最有效的方法。
什麼是錯誤(確切的錯誤消息和它在哪一行發生)?另外你在調試代碼時看到了什麼? – UnholySheep
這不會編譯,是嗎?爲什麼不先修復編譯器錯誤?編譯時發佈[mcve]。 – nvoigt
我首先注意到:'elements = new string;'是* wrong *,因爲之後你會像刪除數組一樣刪除[]'。這已經是*未定義的行爲* – UnholySheep