【问题标题】:C++ 2D Array Initialization In Constructor - Program Runs Forever构造函数中的 C++ 2D 数组初始化 - 程序永远运行
【发布时间】:2014-11-05 03:02:49
【问题描述】:

我有一个基于可变大小创建二维数组的小类。我的课程代码如下

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++ 以来已经有一段时间了,所以我可能只是遗漏了一些明显的东西。

【问题讨论】:

    标签: c++ arrays multidimensional-array constructor


    【解决方案1】:

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

    size = boardSize;
    

    向上几行

    【讨论】:

    • 或者更好的是,使用构造函数初始化列表。
    • 是的,简单的东西哈哈。谢谢!
    【解决方案2】:

    在构造函数中,你没有在循环中初始化“size”

    for (int i = 0; i

    这里的大小是未定义的,不管这里有什么垃圾,都会循环使用

    【讨论】:

      【解决方案3】:

      只是为了支持已经提供的答案,您的 size 变量已被声明但未初始化!在这种情况下,您将把它留给编译器来为 size 分配一个值,该值可能是也可能不是 0。

      经验法则是始终将变量初始化为一个值,即size = boardSize,即使是在这种情况下将它们设置为 NULL 的指针。将“大小”设置为您的输入应该可以解决问题:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 2021-06-30
        • 2018-11-09
        • 1970-01-01
        • 2014-05-23
        相关资源
        最近更新 更多