gpt4 book ai didi

c++ - 字符串类 = 运算符

转载 作者:行者123 更新时间:2023-11-28 03:27:07 25 4
gpt4 key购买 nike

我正在构建自己的字符串类,但在处理子字符串时遇到了一些问题

// Substring operator
// reutns a substring from a given point
String String::Substring(int startPosition, int length) const{
if(length==0)
length = GetLength()+1; //Takes care of null terminator, im not worried about if length is imputed yet
char* result = new char[length-startPosition]; // Assume it's not negative for the sake of just getting it to work, It would only be negative if it's user error
for(int i=startPosition; i<length; i++)
result[i] = Text[i]; //Since it will always go from a given point to the end, the null terminator will transfer in the for loop.

return result;
}

Text 是字符串类的数据成员。我得到一个未处理的异常,访问冲突读取位置。

当我调试它时,它正在经历这些过程

// Init-constructor for initializing this string with a C-string
String::String(const char* text){
*this = text;
}

// Assigns C-string to this String
String& String::operator = (const char* text){
// Delete the existing string first
delete[] Text;

// +1 accounts for null terminator
int trueLength = GetLength(text)+1;

// Allocate new memory
Text = new char[trueLength];

// Copy all characters from source into Text
for ( int i = 0; i < trueLength; i++)
Text[i] = text[i];

return *this;
}

我不知道我做错了什么,谢谢你的帮助。

最佳答案

考虑使用 char* 构造函数创建 String 对象时会发生什么:

String::String(const char* text){
*this = text;
}

尚未初始化任何成员,您调用 operator=:

String& String::operator = (const char* text){
// Delete the existing string first
delete[] Text;

你删除了成员 Text,即使你还没有初始化它。删除未初始化的指针会产生未定义的行为。在这种情况下,该行为是一个异常(exception)。

要么在调用 operator= 之前在构造函数中将 Text 初始化为 null,要么在构造函数中完成所有工作,而不是赋值运算符。

关于c++ - 字符串类 = 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634947/

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