首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有条件跳变

有条件跳变
EN

Stack Overflow用户
提问于 2017-04-30 10:57:07
回答 2查看 139关注 0票数 2

因此,我有一些可以工作的代码,但是val差伦说有一个条件跳转依赖于未初始化的值。我想我知道是什么导致了这种情况(见下文),但我不知道任何替代方案/解决方案。

代码语言:javascript
运行
复制
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++新手的级别)

代码语言:javascript
运行
复制
int main(){
    Vector v(10);
    v[0] = 1;
    cout << v.length() << endl;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-30 11:11:26

循环一直进行到在buffer数组中找到零,也就是说,它期望缓冲区为空终止。将1放置到初始元素中,但元素后面的元素仍未初始化。

将零放入其中将解决这个问题:

代码语言:javascript
运行
复制
Vector v(10);
v[0] = 1;
v[1] = 0;
cout << v.length() << endl;

注意:您应该通过在到达maxLength时终止循环来保证循环的安全:

代码语言:javascript
运行
复制
for (int i = 0 ; i != maxLength && buffer[i] ; ++i) {
    count++;
}

这将确保您不会探测缓冲区结束后的零位置。

票数 0
EN

Stack Overflow用户

发布于 2017-04-30 11:14:33

您可以轻松地用

代码语言:javascript
运行
复制
: maxLength(newLenth), buffer(new int[newLenth]{})
                                               ^^- note

这将使buffer中的所有元素(其中的buffer)初始化为int默认值(即0)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43705622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档