数组内存未正确返回

时间:2016-08-27 19:07:48

标签: c++ arrays

我有一个数组,我试图声明所有它的单元格等于0.每次我尝试访问任何单元格,除了第一个,它们总是返回-858993460,这绝对不是0

这是数组的声明:

int values[8] = { };

这是打印的阵列单元格,打印出来-858993460。

cout << value.values[1];

这条线很好用,但是:

cout << value.values[0];

值对象的确切声明(Value是一个类):

Value value;

价值宣言类:

#pragma once
class Value{
    public:
    int values[8] = { };
    Value();
    ~Value();
};

只有第一个单元格打印0,那么如何声明一个所有单元格为0的数组?

对于任何其他信息,这里有足够的代码来重现问题(将其与Value的声明结合起来:

#include <iostream>
#include "Value.h"
using namespace std;

int main(){
    char null;
    Value value;
    cout << value.values[1];
    cin >> null; //this just holds up the program so I have time to read what it printed
    return 0;
}

2 个答案:

答案 0 :(得分:3)

int values[(2 ^ 3)] = { };
std::cout << values[0];

如您所料生成0。 value.values是您未展示的其他值。

2 ^ 3等于1,您可能需要pow的版本。这就解释了为什么你得到了

  

初始化变量太多

当您使用int values[(2 ^ 3)] = { 0,0,0,0,0,0,0,0 };时,因为values只有1个元素。

int values[8] = {};会使用0正确初始化所有8个值。

答案 1 :(得分:1)

您似乎假设^是一个取幂运算符。它不是; C ++没有取幂运算符。 ^是按位xor,所以2^3 == 1。如果您尝试访问索引大于0的元素,您将获得垃圾(实际上是未定义的行为,但垃圾值是常见症状)。

您可以使用1 << 3,这会产生8 - 或者您可以使用8

如果你要定义一个独立的对象,这应该有用:

int values[8] = { };

但如果values实际上是结构或类的成员(正如您使用value.values[0]所暗示的那样),那么它就是另一回事。如果您想了解相关信息,请更新问题以在正确的背景下显示values的声明。