をflaut私のプログラムを実行すると、私は問題を抱えていると私はエラー(セグメンテーションフォールト)は、この次のコードからであることが判明:C++演算子オーバーライドコピーコンストラクタポインタエラーセグメントが
char* OSname;
char* HWname;
Computer(const char* a,const char* b){
strcpy(OSname,a); strcpy(HWname,b);
}
私がわかりません私は間違っている。
をflaut私のプログラムを実行すると、私は問題を抱えていると私はエラー(セグメンテーションフォールト)は、この次のコードからであることが判明:C++演算子オーバーライドコピーコンストラクタポインタエラーセグメントが
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
strcpyを実行する前に、 'char * OSname = new char [strlen(a)+ 1];'のようなものが必要で、後で '[]'を忘れることはありません。 'char * OSname = new char [strlen(a)+ 1];'を使って – doctorlove
なぜ、コピーコンストラクタに言及していますか?確かにコピーコンストラクタは 'Computer(const Computer&other)'のように見えるでしょう – doctorlove
はい私のコンピュータにはComputer(const Computer&tmp)があり、strcpy()もあります。だから私は一度だけエラーを言及します。 –