Ошибка сегментации вектора C ++ - PullRequest
1 голос
/ 29 июня 2019

Я пытаюсь запустить свою программу c ++ на экземпляре amazon linux ec2 и получаю ошибку сегментации в фрагменте кода, который отлично работает на 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 байта типа unsigned char.seg_byte здесь может быть '\ 0', но даже если я заменю seg_byte на 'a' или использую 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

Если я напишу небольшой test.cpp файл, который выполняет только цикл for, заполняющий vector<unsigned char>, я не получаю никаких ошибок.

1 Ответ

2 голосов
/ 29 июня 2019

получение ошибки сегментации в фрагменте кода, который отлично работает на MacOS и Ubuntu

Если вы создадите свою программу с Address Sanitizer (что вы должны привыкнуть делать все время ), она скажет вам сразу о переполнении буфера.

Построить с помощью Address Sanitizer очень просто:

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