因此,我有一些可以工作的代码,但是val差伦说有一个条件跳转依赖于未初始化的值。我想我知道是什么导致了这种情况(见下文),但我不知道任何替代方案/解决方案。
class Vector{
private:
int maxLength;
int *buffer;
void error(char* msg){
cerr << "Error: " << msg << endl;
}
bool inBounds(int i){
return i>=0 && i < maxLength;
}
public:
Vector(int newLenth)
: maxLength(newLenth), buffer(new int[newLenth])
{
}
int & operator [] (int index){
if (!inBounds(index)){
error("Out of bounds");
}
return buffer[index];
}
int length(){
int count =0;
for (int i = 0; buffer[i];++i){
count +=1;
}
return count;
}
};
我认为问题在于,在for循环中,bufferi没有“初始化”。我该怎么做才能解决这个问题?(请在c++新手的级别)
int main(){
Vector v(10);
v[0] = 1;
cout << v.length() << endl;
}
发布于 2017-04-30 11:11:26
循环一直进行到在buffer
数组中找到零,也就是说,它期望缓冲区为空终止。将1
放置到初始元素中,但元素后面的元素仍未初始化。
将零放入其中将解决这个问题:
Vector v(10);
v[0] = 1;
v[1] = 0;
cout << v.length() << endl;
注意:您应该通过在到达maxLength
时终止循环来保证循环的安全:
for (int i = 0 ; i != maxLength && buffer[i] ; ++i) {
count++;
}
这将确保您不会探测缓冲区结束后的零位置。
发布于 2017-04-30 11:14:33
您可以轻松地用
: maxLength(newLenth), buffer(new int[newLenth]{})
^^- note
这将使buffer
中的所有元素(其中的buffer
)初始化为int
默认值(即0
)。
https://stackoverflow.com/questions/43705622
复制相似问题