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

C++实现的Brainfuck解释器无法运行通用Hello World程序求助

问题定位

以下是你代码中导致执行异常的核心问题:

  • 内存数组未初始化
    你声明的局部数组int array[30000];没有做清零操作,C++局部栈数组初始值为随机垃圾值,直接导致[指令的跳转判断逻辑完全不符合预期,整个循环执行逻辑错误。
  • 未跳过非指令字符
    你仅对<>+-.,[]八个Brainfuck有效指令做了处理,如果输入代码包含空格、换行、注释等其他字符,你的代码不会对指令指针pos执行自增操作,会卡在无效字符位置无限循环,无法继续执行后续代码。
  • (可选优化)缺少数据指针边界校验
    当前没有对pos_in_stack做上下限校验,当代码出现超出30000范围的指针移动时,会触发数组越界访问,引发未定义行为。

修复方案

  1. 初始化内存数组,将所有元素初始值设为0:
// 把原来的数组声明改成下面的写法
int array[30000] = {0};
  1. 在所有指令判断逻辑的末尾,添加无效字符跳过逻辑:
// 放在所有if指令判断的最后面
// 所有有效指令都已经通过continue跳过了本段逻辑,只有无效字符会走到这里
pos++;
  1. (可选)添加数据指针边界校验,避免越界访问:
// 处理>指令时
if(file_data.at(pos) == '>')
{
    pos_in_stack++;
    if(pos_in_stack >= 30000) pos_in_stack = 0; // 或者根据需求做越界拦截
    pos++;
    continue;
}
// 处理<指令时
if(file_data.at(pos) == '<')
{
    pos_in_stack--;
    if(pos_in_stack < 0) pos_in_stack = 29999; // 或者根据需求做越界拦截
    pos++;
    continue;
}

修改完成后重新编译运行,即可正常执行标准Brainfuck Hello World代码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:27:03