делая незаконный доступ к вектору в памяти

Я объявляю вектор в файле .h:

typedef std::vector<bool> bit_vector;
bit_vector decoded_lcw_vec;

В файле .cc я заполняю вектор так:

 bit_vector decoded_lcw_vec(corrected_array, corrected_array + sizeof corrected_array / sizeof corrected_array[0]) ;

и правильные значения в нем:

printf( "\n\n Decode LDU1 LCW Vector Complete:");
for(int i = 0 ; i < 72; i++ )  cout << decoded_lcw_vec[i];

дает:

Decode LDU1 LCW Vector Complete:000000000000000000000000000000000000111111111111000000000000000000000101

поэтому проблема в том, что если я пытаюсь получить доступ к вектору вне функции, в которой он заполнен, я получаю ошибку сегмента. Независимо от того, как я пытаюсь получить доступ к вектору, программа умирает. Я хочу делать:

uint16_t
ldu1::lcf() const
{
const size_t LCF_BITS[] = {
0, 1, 2, 3, 4, 5, 6 , 7
};
const size_t LCF_BITS_SZ = sizeof(LCF_BITS) / sizeof(LCF_BITS[0]);
const uint16_t lcf = extract(decoded_lcw_vec, LCF_BITS, LCF_BITS_SZ);
return lcf;

}

это сег ошибки. Я пробовал много других способов получить доступ к вектору. Если я попробую какой-либо оператор печати или что-то еще, ошибки программы seg. Таким образом, независимо от того, как я пытаюсь это сделать, программа вызывает ошибку при попытке доступа к вектору вне функции, в которой он заполнен. Проблема должна быть в том, что я пытаюсь сделать незаконный доступ правильным? Как это может быть, так как я объявил вектор закрытым в файле .h и класс не был уничтожен ?? Этот вектор должен, по крайней мере, у меня сложиться впечатление, что он сохранится, пока класс не будет уничтожен.

Возможно ли, что этот вектор находится в стеке и, следовательно, выходит за рамки контроля времени, возвращаемого после вызова?

0

Решение

Кажется, проблема в том, что вы объявляете новую переменную с тем же именем в вашей функции. Эта область видимости переменных является функцией и уничтожается в конце функции. Если вы хотите, чтобы он был членом класса, измените эту строку:

bit_vector decoded_lcw_vec(corrected_array, corrected_array + sizeof corrected_array / sizeof corrected_array[0]) ;

чтобы:

decoded_lcw_vec = bit_vector(corrected_array, corrected_array + sizeof corrected_array / sizeof corrected_array[0]);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]