C++自定义SuperString类find函数获取构造生成字符数组问题
问题核心原因
- 你不需要在
find函数里重新计算数组长度:构造函数已经把正确的字符串长度存入了类的成员变量size,直接使用即可。 - 原代码中
size = *(&data + 1) - data;的计算方式仅对栈上分配的原生数组有效,data是你动态申请的堆内存指针,这种方式得到的长度是错误的,还会覆盖原有正确的size成员变量值。 - 测试调用时参数类型错误:
find第一个参数要求是char类型,你传入的"e"是字符串常量,应该改为单引号包裹的字符'e'。
修复后的find函数代码
int SuperString::find(char c, int start) { // 可选增加参数合法性校验,避免start越界 if (start < 0 || start >= size) { return -1; } for(int i = start; i < size ; i++){ if(data[i] == c){ return i; } } return -1; }
额外注意事项
- 记得在类的析构函数里释放
data指向的动态内存,避免内存泄漏,示例析构函数如下:
SuperString::~SuperString() { delete[] data; }
- 如果需要支持类的拷贝、移动操作,还需要自行实现拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符,避免浅拷贝导致的double free问题。
内容的提问来源于stack exchange,提问作者sethro
相关产品推荐
相关产品推荐

