c++ - 非法访问内存中的 vector

标签 c++ vector illegalaccessexception

我在 .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/

相关文章:

java - 无法从类访问父类(super class)

c++ - 常量与可变迭代器 : same algorithm different code

c++ - 不同结构的列表( vector )

c++ - 使用派生类分配基类指针的内存

java - Vector 中的对象无法转换为 int

c++ - vector::push_back 从 const Type* 到 type* 的转换

java.lang.IllegalAccessError : Trying to access a field in parent class from inner class in child that is dynamically loaded 错误

c++ - C++中是否有任何部分复制构造函数?

c++ - 如何方便地打印出 std::stack 或 std::queue 中的所有元素