我在 .h 文件中声明了一个 vector :
typedef std::vector<bool> bit_vector;
bit_vector decoded_lcw_vec;
在 .cc 文件中,我像这样填充 vector :
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
所以问题是,如果我尝试在填充它的函数之外访问 vector ,那么我会遇到段错误。无论我如何尝试访问 vector ,程序都会死掉。我想做的:
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;
它会出现故障。我尝试了许多其他方法来访问 vector 。如果我尝试任何类型的 print 语句或其他任何类型的语句,程序就会出现段错误。因此,无论我如何尝试,程序在尝试访问填充它的函数外部的 vector 时都会出错。问题必须是我正在尝试进行非法访问吗?这是怎么回事,因为我在 .h 文件中声明了 vector private 并且该类还没有被破坏?那个 vector 应该,至少我的印象是它会一直存在,直到类被销毁。
是否有可能这个 vector 在堆栈上,因此在控制从调用返回时超出范围?
最佳答案
问题似乎是您在函数中声明了一个同名的新变量。这个变量范围是函数,并在函数结束时被销毁。如果您希望它成为类(class)成员,请更改此行:
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]);
关于c++ - 非法访问内存中的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20528267/