You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:15:03