カスタム文字列クラスのadd関数をオーバーロードしようとしているため、オブジェクトの長さと配列の両方を追加するために一時オブジェクトを作成しますが、セグメント化エラーが発生しますなぜか分からない。私は代入演算子と等価演算子の両方をテストしており、どちらも完全に動作しています。このループ文字列クラス+演算子
while (p != (sLength - 1))
{
tmp.s[p] = s[p];
p++;
}
が可変の反復を終了する
myString myString::operator+(const myString& str) const{
int p = 0;
myString tmp;
tmp.sLength = sLength + str.sLength;
tmp.s = new char[tmp.sLength];
while (p != (sLength - 1))
{
tmp.s[p] = s[p];
p++;
}
while (p != (tmp.sLength - 1))
{
tmp.s[p] = str.s[(p - sLength)];
p++;
}
return tmp;
//tmp.s = NULL;
}
myString& myString::operator=(const myString& str)
{
if (this != &str)
{
if (s != NULL)
{
if (str.s == NULL)
{
sLength = 0;
s = NULL;
}
else
{
delete [] s;
s = new char [str.sLength];
sLength = str.sLength;
for (int i = 0; i < sLength; i++)
s[i] = str.s[i];
}
}
}
return *this;
}
[最小、完全で、かつ検証可能な例](http://stackoverflow.com/help/mcve)を投稿してください。あなたのコードは[The Rule of Three](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)に準拠していますか? – MikeCAT
あなたはgdbを試す必要があります:gdbでコードを実行する( 'run')、フォールトすると( 'up'を使って)認識したコードにスタックを登ります。このコードを見てください。 "p * this"を試してみてください。オブジェクトの状態を参照してください。 "p localVar" –