来自类数组的奇怪行为

时间:2016-04-20 14:42:01

标签: c++ arrays class boolean

这是我的班级:

class counters {
    // variables
public:
    bool isUsed;
    int counterNumber;
    int eventType;
    char eventDescriptor[256];
    // methods
public:
    counters();
    void setCounterNumber(int counterNumber);
    void setEventType(int eventType);
    void setEventDescriptor(const char* eventName );
};

这是我的班级构造函数:

counters::counters()
{
    isUsed=true;
    counterNumber=0;
    eventType=0;
    strcpy(eventDescriptor,"");
}

这是我对数组的声明:

printf("There are %d counters\n",numberOfCounters);
counters pCounters[numberOfCounters];
int i;
for (i=0;i<9;i++)
    printf("%d: Is this valid: %d\n",i,pCounters[i].isUsed);

在这种情况下,numberOfCounters=(rval>>11)&31;变量6设置如上。我查看计数器是否正在使用,然后我做了一些有用的工作。我的问题是,当我循环检查它是否使用/ true时,它允许我访问无效的数组元素,并返回正整数,这被解释为true,使我的测试看看它的使用是否无效。我知道必须有一些我不理解的东西,否则我的代码会起作用。在尝试访问范围之外的数组元素时,我不应该收到错误吗?

输出:

There are 6 counters
0: Is this valid: 1
1: Is this valid: 1
2: Is this valid: 1
3: Is this valid: 1
4: Is this valid: 1
5: Is this valid: 1
6: Is this valid: 160
7: Is this valid: 0
8: Is this valid: 0

2 个答案:

答案 0 :(得分:1)

除非使用std::array<>成员函数,否则不会对C样式数组(或实际上在C ++样式at上)进行数组边界检查。如果要进行边界检查,则应使用std::vector<>

答案 1 :(得分:1)

不一定,你可以说,当访问索引大于大小的元素时,它会导致未定义的行为。 有关详细信息,请参阅http://www.cplusplus.com/reference/array/array/operator[]/