C 矢量分割故障

c++ vector segmentation fault

本文关键字:故障 分割      更新时间:2023-10-16

我正在尝试在Amazon Linux EC2实例上运行我的C 程序,并在MacOS和Ubuntu上运行良好的代码中获得分割故障。代码摘录是此

    vector<unsigned char> header(8);
    bool bool_byte[8];
    unsigned char seg_byte;
    int byte_num = 0;
    for(int i = 0; i < 32; i++) {
        bool_byte[i] = snb[i];
        if(i % 8 == 7) {
            seg_byte = to_byte(bool_byte);
            byte_num = (i + 1)/8;
            cout << "byte_num minus one is " << to_string(byte_num - 1) << endl;
            cout << "vector size " << to_string(header.size()) << endl;
            header[byte_num - 1] = seg_byte;
        }
    }

我将32位布尔数组转换为4个字节的无符号字符。seg_byte这里可能是' 0',但是即使我用'a'替换seg_byte,或使用header.reserve(8)并使用push_back而不是数组索引,我仍然会得到分割错误。我还尝试使用vector<char>并将其铸造为char,但仍会获得分段故障。cout语句打印此。

byte_num minus one is 0
vector size 8
byte_num minus one is 1
vector size 139991841770280
Segmentation fault

如果我编写一个仅运行A用于循环填充vector<unsigned char>的小test.cpp文件,我没有任何错误。

在MacOS和Ubuntu

上运行良好的代码中获得分割故障

如果您使用地址消毒剂构建程序(您应该始终习惯于(,它将立即告诉您 关于缓冲区的流失。

用地址消毒剂建造非常容易:

g++ -fsanitize=address -g test.cpp