我不能真正想到一個好的方法來描述這一點,但我不知道爲什麼,即使它會編譯,它在執行時崩潰。 我試圖調用類的功能,nextTrain(),以我的類指針,貼切,它的工作之前,我重新分配指針,不過,這條線在重新分配指針後使用類指針功能
apt = apt->nextTrain()
同級功能無法調用的任何後更長的時間。
全碼:
#include <iostream>
#include <string>
using namespace std;
class train {
public:
string cars[100];
int index;
int total;
train(string n) { cars[0] = n; index=0; total=0;}
train(string c[100], int ix, int t) {
for (int i = 0; i < 100; i++) {
cars[i] = c[i];
}
index = ix; total = t;
}
train* nextTrain() {
train t(cars, index, total);
train* ret = &t;
ret->atoix(1);
return ret;
}
train* prevTrain() {
train t(cars, index, total);
train* ret = &t;
ret->atoix(-1);
return ret;
}
void atoix(int val) {
index += val;
}
void add(string name) {
cars[total+1] = name;
total++;
}
string getName() {
return cars[index];
}
};
int main()
{
train a("Engine");
train* apt = &a;
apt->add("Train2");
apt->add("Train3");
cout << apt->nextTrain()->getName() << endl;
apt = apt->nextTrain();
cout << apt->getName() << endl;
cout << apt->nextTrain()->getName() << endl;
cout << apt->prevTrain()->getName() << endl;
cout << apt->getName() << endl;
}
'列車噸(汽車,指數,總); train * ret =&t; return ret;'是:(1)創建局部變量(2)在函數結束時獲取它的指針(3),稍後破壞局部變量(4),訪問曾經存放局部變量的存儲器並得到未定義的行爲。 – grek40