我在想以下創建類的對象的方式有什麼區別。頭文件是:創建類的對象的方法
class NumberRange {
public:
NumberRange(int a, int b);
virtual ~NumberRange();
void Print(int a, int b);
private:
int *range_;
int size;
};
.cc文件是:
#include <iostream>
#include "numberrange.h"
using namespace std;
NumberRange::NumberRange(int a, int b) {
if (a > b) {
cout << "a must be equal or less than b" << endl;
}
}
NumberRange::~NumberRange() {
}
void NumberRange::Print(int a, int b) {
this->size = b - a + 1;
this->range_[0] = a;
for (int i = 0; i < this->size; i++) {
this->range_[i] = a + i;
cout << this->range_[i] << endl;
}
}
int main() {
NumberRange * numberrange = new NumberRange(5, 9);
numberrange->Print(5, 9);
}
當我使用指針創建一個對象,並編譯該程序。我得到一個錯誤說:[1] 20346 segmentation fault ./numberrange
,但如果我改變的主要功能爲:
int main() {
NumberRange numberrange(5,9);
numberrange.Print(5,9);
}
這將是工作。所以我不知道什麼時候應該用指針來創建一個對象。謝謝!
該對象的其中一個字段是'int * range_'。你永遠不會在構造函數中初始化/分配它,所以在Print函數中使用它將是未定義的行爲。有時它會起作用,有時不起作用。首先解決問題,然後重試。 –
你錯過了分配'range_',那很簡單。所以你調用未定義的行爲。未定義的行爲是......好的......未定義的。 –
如果第二個工作,那只是因爲你運氣好。你訪問'range_'對象而不給它任何存儲,這是未定義的行爲。 – Chad