運行了一個程序,我發現錯誤(分段錯誤)是從這個下面的代碼時,我有一個問題:C++操作符重載拷貝構造函數指針錯誤段flaut
char* OSname;
char* HWname;
Computer(const char* a,const char* b){
strcpy(OSname,a); strcpy(HWname,b);
}
我不知道是什麼我做錯了嗎?
運行了一個程序,我發現錯誤(分段錯誤)是從這個下面的代碼時,我有一個問題:C++操作符重載拷貝構造函數指針錯誤段flaut
char* OSname;
char* HWname;
Computer(const char* a,const char* b){
strcpy(OSname,a); strcpy(HWname,b);
}
我不知道是什麼我做錯了嗎?
char* OSname;
聲明瞭一個指針,但沒有指向任何地方。如果你想在某處複製一個字符串,你需要一些存儲器,所以必須分配一些內存(記住釋放它)或者只是使用一個數組。
無論在哪種情況下,您都需要確保有足夠的內存用於完整的strcpy
,並且複製的char *
實際上是空終止或使用strncpy
。
既然你已經標記了這個C++這是值得我們思考的使用std::string
代替:
std::string OSname;
std::string HWname;
Computer(const std::string & a,const std::string & b){
OSname = a; HWname=b;
}
這是非常有可能避免你的問題。
練習要求OSname和HWname是一個指針,我不擅長指針。 –
抱怨誰設置練習! – doctorlove
你需要像'char * OSname = new char [strlen(a)+ 1];'在執行strcpy之前,不要忘記在稍後刪除[]'。 – doctorlove
出於興趣,你爲什麼提到複製構造函數?當然,拷貝構造函數看起來像'Computer(const Computer&other)' – doctorlove
是的,我在我的程序中有計算機(const Computer&tmp),它也有strcpy()。所以我只提一次錯誤。 –