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

制作控制台瓦片生成器遇代码问题,寻求调试帮助

控制台瓦片生成器代码修复方案

你的代码存在两个核心问题,直接导致功能异常:

  • 内层循环结束后,j的值等于height,此时output[i][j] += "\n"会触发数组越界访问(数组下标范围是0到height-1),引发未定义行为。
  • 直接操作二维数组元素拼接内容,若output[i][j]未初始化,会引入垃圾值,导致输出混乱。

用临时变量重构代码即可解决这些问题,以下是修复后的版本:

if (pattern) { // 布尔变量可直接作为条件,无需与true比较
    for (int i = 0; i < length; i++) {
        std::string current_line; // 临时变量存储当前行内容
        for (int j = 0; j < height; j++) {
            // 合并嵌套条件,逻辑与原代码完全一致
            if (j % 3 == 0 || i % 3 == 0) {
                current_line += main;
            } else {
                current_line += filler;
            }
        }
        current_line += "\n"; // 为当前行添加换行符
        output[i] = current_line; // 将构建好的行赋值给结果数组
    }
}

修复说明

  1. 用std::string current_line作为临时容器构建每行内容,从空字符串开始拼接,避免未初始化的垃圾值,同时彻底解决越界问题。
  2. 合并原嵌套条件为j%3==0 || i%3==0,代码更简洁易读,逻辑完全等价。
  3. 最后将完整行赋值给output[i],确保每行内容(包括换行符)正确存入结果数组。

如果你的output是C风格char**数组,需要额外处理内存分配:

// 提前为每行分配内存(height为每行字符数,预留换行和结束符空间)
char** output = new char*[length];
for (int i = 0; i < length; i++) {
    output[i] = new char[height + 2];
}

// 循环内将临时字符串转为C风格字符串赋值
strcpy(output[i], current_line.c_str());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:55:25