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

删除cout<<""<<endl;语句后出现Bus error:10报错如何解决

问题本质

你遇到的Bus error:10崩溃和删除cout<<""<<endl;没有直接关联,是代码本身存在大量内存非法访问的未定义行为,cout语句的存在只是刚好改变了程序运行时的内存布局,暂时掩盖了非法访问的崩溃表现,删除后触发崩溃是必然结果。

具体错误点

  • rotate函数内的指针r未分配内存就直接写入,属于野指针越界写:
    需要先根据输入字符串长度申请内存,要多留1字节存储字符串结束符\0:char* r = new char[strlen(a) + 1];
  • Crypt函数内所有动态内存分配逻辑完全错误:
    所有指针在定义后未初始化就调用strlen读取长度,读取的是野地址的随机值,分配的内存大小完全不符合预期;且后续你直接将这些指针重新赋值为字符串字面量,此前申请的内存直接泄漏,字符串字面量位于只读内存段,后续修改也会触发非法访问。
  • 内层循环条件书写错误:for (int c = 0; i < int(strlen(a)); c++) 条件误写为i < strlen(a),会导致无限循环或数组越界,应该改为c < strlen(a)。
  • 字符串字面量的类型为const char*,赋值给非const的char*属于非法类型转换,会触发未定义行为。
  • 所有new申请的内存没有对应的delete释放,存在严重内存泄漏。

修复后代码

#include <iostream>
#include <cstring>
using namespace std;

char* rotate(char const* a, int b)
{
    int len = strlen(a);
    // 先申请足够的内存
    char* r = new char[len + 1];
    // 统一处理偏移量异常情况
    b = b % len;
    if (b < 0) b += len;
    for (int i = 0; i < len; i++) {
        if (i >= len - b) {
            r[i] = a[i - (len - b)];
        } else {
            r[i] = a[i + b];
        }
    }
    r[len] = '\0';
    return r;
}

char* Crypt(const char* Input, bool Encrypt, int InitialRotation, int Rotation)
{
    const char* Table = "JPGVOUMFYQBENHZRDKASXLICTW";
    const char* a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int inputLen = strlen(Input);
    // 提前申请结果所需内存
    char* Result = new char[inputLen + 1];
    int Offset = InitialRotation;
    int b;
    for (int i = 0; i < inputLen; i++) {
        // 修正循环条件
        for (int c = 0; c < strlen(a); c++) {
            if (a[c] == Input[i]) {
                b = c;
                break;
            }
        }
        char* rotatedTable = rotate(Table, Offset);
        Result[i] = rotatedTable[b];
        // 释放临时申请的内存避免泄漏
        delete[] rotatedTable;
        Offset = Offset + Rotation;
    }
    Result[inputLen] = '\0';
    return Result;
}

int main()
{
    const char* A = "ZZZZ";
    char* res = Crypt(A, 1, 1, 4);
    cout << res << endl;
    // 释放结果内存
    delete[] res;
    return 0;
}

内容的提问来源于stack exchange,提问作者Andrii Kovach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:54:04