gpt4 book ai didi

c++ - 段错误c++

转载 作者:行者123 更新时间:2023-11-28 08:15:35 25 4
gpt4 key购买 nike

我遇到了段错误,但我不知道如何调试它!它发生在创建 MyString 数组之后,即创建的数组没有任何问题。

void ConcatTest()
{
cout << "\n----- Testing concatentation on MyStrings\n";

const MyString s[] =
{MyString("outrageous"), MyString("milk"), MyString(""),
MyString("cow"), MyString("bell")};

for (int i = 0; i < 4; i++) {
cout << s[i] << " + " << s[i+1] << " = " << s[i] + s[i+1] << endl;
}
}

所以我认为这可能与我在这里重载 + 运算符有关:

MyString operator+(MyString str1, MyString str2)
{
MyString resultStr = MyString();
delete [] resultStr.pString;
resultStr.pString = new char[strlen(str1.pString) + strlen(str2.pString) + 1];
MyString temp = MyString();
delete [] temp.pString;
temp.pString = new char[strlen(str1.pString) + 1];
strcpy(temp.pString, str1.pString);
delete [] str1.pString;
str1.pString = new char[strlen(str1.pString) + strlen(str2.pString) + 1];
strcpy(str1.pString, temp.pString);
strcat(str1.pString, str2.pString);
strcpy(resultStr.pString, str1.pString);
return resultStr;
}

如有任何帮助或建议,我们将不胜感激!

最佳答案

您尝试在 + 方法执行到一半时删除 str1.pString

但是 str1 是作为 const MyString 传递的,它指向程序中的静态字符串。你不能取消分配这个!

很可能就是这个原因。您不应该修改操作符中的 str1str2

如果我没有正确理解你的程序,你想修改输入字符串。为此,您必须使用真实 char[] 字符数组构造您的初始MyString,而不是像“outrageous”这样的静态引用字符串.

所以,

char* ch1="outrageous";   // ch1 points to a nonmutable memory area
char* str1 = new char[strlen(ch1)]; // str1 now points to a mutable region of memory
strcpy(str1,ch1); // that mutable region now contains the static string

MyString string1 = new MyString(str1); // this string is now writable/changeable

这个 string1 现在是可变的;

关于c++ - 段错误c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com