gpt4 book ai didi

c++ - Valgrind 条件跳转

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:43:44 24 4
gpt4 key购买 nike

所以我有一些有效的代码,但 valgrind 说有一个条件跳转取决于未初始化的值。我想我知道是什么原因造成的(见下文),但我不知道任何替代方案/解决方案。

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 循环中,buffer[i] 没有被“初始化”。我应该怎么做才能解决这个问题? (请达到 c++ 新手的水平)

int main(){
Vector v(10);
v[0] = 1;
cout << v.length() << endl;
}

最佳答案

循环一直进行,直到它在 buffer 数组中找到零,即它期望缓冲区以 null 终止。您将 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++;
}

这将确保您不会探测超过零缓冲区末尾的位置。

关于c++ - Valgrind 条件跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43705622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com