构造函数中的C ++ 2D数组初始化 - 程序永远运行

时间:2014-11-05 03:02:49

标签: c++ arrays multidimensional-array constructor

我有一个基于可变大小创建2D数组的小类。我为该课程编写的代码如下

class Treasure
{
        int** board;
        int size;

    public:
        Treasure(int boardSize)
        {
            board = new int* [boardSize];
            for (int i = 0; i < size; i ++)
            {
                board[i] = new int[boardSize];
            }

            size = boardSize;
        }

        ~Treasure()
        {
            for (int i = 0; i < size; i++)
            {
                delete [] board[i];
            }
            delete [] board;
            board = NULL;
            size = 0;
        }

        int get_value(int row, int col)
        {
            return board[row][col];
        }

        void set_value(int row, int col, int value)
        {
            board[row][col] = value;
        }


};

我想测试一下getter所以我只是运行了一些简单的代码:

int main(int argc, const char * argv[])
{   
    Treasure x1(2);
    cout << x1.get_value(0, 0) << endl;

    return 0;
}

出于某种原因,当我运行代码时,终端窗口只有一个闪烁的光标,CPU上升到100%,内存使用率在几秒钟内上升到1.5GB。

有没有人知道为什么会这样?自从我使用C++以来已经有一段时间了,所以我可能会错过一些明显的东西。

3 个答案:

答案 0 :(得分:1)

在设置其值之前,您在构造函数中使用size。所以你只会有一个垃圾值。只需移动

size = boardSize;

向上几行

答案 1 :(得分:0)

在构造函数中,您没有初始化&#34; size&#34;在循环中

  

for(int i = 0; i&lt; size; i ++)

这里的大小是未定义的,无论这里有什么垃圾,它都会在循环中使用

答案 2 :(得分:0)

为了支持已经提供的答案,您的size变量已经声明但未初始化!在这种情况下,您将其留给编译器将值分配给大小,该大小可能是也可能不是0.

经验法则是始终将变量初始化为值size = boardSize,甚至是指针,在这种情况下将它们设置为NULL。设置&#34;大小&#34;你的输入应该解决问题:)

相关问题