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

C++从txt文件读取二维三角数组及段错误问题排查

问题根源

你的代码存在3处致命的内存错误,直接触发未定义行为,这是release模式无输出、偶发段错误的核心原因:

  • arr初始分配大小和类型完全不匹配:arr是int**类型,存储的元素是指针,64位系统下单个指针占8字节,但你用malloc(3*sizeof(int))只分配了12字节空间,连2个指针都存不下,且后续行数增加时从未给arr扩容,写入arr[size-1]时从第一行开始就存在堆越界写。
  • 单行数组分配长度错误:你用new int[size-1]给当前行分配空间,但当前行实际需要存储size个元素:读取第一行时size=1,你实际分配了0长度的数组,后续循环写入size个元素时完全越界,直接破坏堆内存结构。调试模式下编译器会给堆块额外填充保护字节,越界不会立刻触发崩溃,release模式无额外保护,堆结构被破坏后就会出现无输出、随机崩溃的现象。
  • 混合使用malloc/realloc和new时没有做对应释放,虽然小程序退出时系统会回收内存,但不规范的内存操作会放大越界问题的影响。
修复后可直接运行的代码
#include <iostream>
#include <fstream>
#include <cstdlib>

int main() {
    std::ifstream input_file("input_file.txt");
    if (!input_file.is_open()) {
        std::cerr << "无法打开输入文件\n";
        return 1;
    }

    int line_length{1};
    int arr_capacity = 4;
    int **arr = (int**)malloc(arr_capacity * sizeof(int*));
    int *line_buffer = (int*)malloc(line_length * sizeof(int));

    int temp{};
    int curr_index{};

    while(input_file >> temp){
        line_buffer[curr_index] = temp;
        curr_index++;
        if(curr_index == line_length){
            if (line_length > arr_capacity) {
                arr_capacity *= 2;
                arr = (int**)realloc(arr, arr_capacity * sizeof(int*));
            }
            arr[line_length - 1] = new int[line_length];
            for(int i = 0; i < line_length; i++){
                arr[line_length - 1][i] = line_buffer[i];
            }
            line_length++;
            curr_index = 0;
            line_buffer = (int*)realloc(line_buffer, line_length * sizeof(int));
        }
    }

    input_file.close();

    int total_lines = line_length - 1;
    for(int a = 0; a < total_lines; a++){
        for(int j = 0; j <= a; j++){
            std::cout << arr[a][j] << " ";
        }
        std::cout << "\n";
        delete[] arr[a];
    }
    free(line_buffer);
    free(arr);

    return 0;
}

代码额外增加了文件打开校验、arr动态扩容逻辑、内存匹配释放逻辑,修正了所有内存长度错误,读取你给出的示例三角数组可正常输出:

1 
8 4 
2 6 9 
8 5 9 6 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:27:29