【发布时间】:2017-04-30 10:57:07
【问题描述】:
所以我有一些有效的代码,但 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;
}
【问题讨论】:
-
分配后初始化缓冲区?
memset(buffer,0, sizeof(int) * newLenth); -
那会在初始化列表之后,对吗?另外,我试了一下,得到一个错误,说 memset 没有在这个范围内声明。
-
它应该进入构造函数主体,在 {} 之间。
memset在memory.h标头中声明。您需要将其包含到您的文件中。
标签: c++