这是我的指针二维数组应该显示的指针吗?

时间:2018-06-12 19:51:00

标签: c++

我希望找出我是否正确初始化了这个数组,因为当我显示它时,它不会显示我认为它应该显示的内容。这是代码:

 #include <iostream>
    #include <string.h>
    void Pause()
    {
        std::cin.get();
        std::cin.ignore();
    }

    int main() 
    {
        int n = 0;
        int size;

        std::cout << "Enter what width you want the board to be: ";
        std::cin >> size;

        int **p_p_Board;
        p_p_Board = new int*[size];

        //Loops for initializing array
        for (int i = 0; i < size; i++) 
        {
            p_p_Board[i] = new int[size]; 
        }
            for (int i = 0; i < size; i++)
        {
            for (int j = 0; i < size; i++)
            {
                //Initializing Array
                p_p_Board[i][j] = 0;
            }
        }

        //Display loops
        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < size; j++)
            {
                //Displaying the array
                std::cout << p_p_Board[i][j];
                n++;
               if (n == size)
                {
                    std::cout << std::endl;
                    n = 0;
                }
            }
        }

        Pause();

        for (int i = 0; i < size; i++)
        {
            delete [] p_p_Board[i];
        }
        delete p_p_Board;
    }

这是显示屏:

Enter what width you want the board to be: 8
0-842150451-842150451-842150451-842150451-842150451-842150451-842150451
0-842150451-842150451-842150451-842150451-842150451-842150451-842150451
0-842150451-842150451-842150451-842150451-842150451-842150451-842150451
0-842150451-842150451-842150451-842150451-842150451-842150451-842150451
0-842150451-842150451-842150451-842150451-842150451-842150451-842150451
0-842150451-842150451-842150451-842150451-842150451-842150451-842150451
0-842150451-842150451-842150451-842150451-842150451-842150451-842150451
0-842150451-842150451-842150451-842150451-842150451-842150451-842150451

如您所见,它会在每行的第一个数字后打印数字-842150451。虽然每行中的第一个数字正确设置为0,但其余的不是。这是正确的还是我的代码中有错误?

2 个答案:

答案 0 :(得分:3)

for (int j = 0; i < size; i++)

应该是

for (int j = 0; j < size; j++)

但如果你使用std::vector而不是原始指针,那么你的初始化代码可能会被忽略:

std::vector<std::vector<int>> board(size);
for (auto& row : board)
{
  row.resize(size);
}

您也可以省略删除操作,而您的代码泄漏内存的可能性会小得多。

您的显示代码也可以简化:

for (const auto& row : board)
{
    for (int element : row)
    {
        std::cout << element;
    }
    std::cout << "\n";
}

答案 1 :(得分:0)

小错字:

for (int j = 0; i < size; i++)
//              ^         ^^^ should be 'j'

您还可以使用0

在一个循环中将值设置为std::fill_n
int **p_p_Board = new int*[size];
for (int i = 0; i != size; ++i) {
    p_p_Board[i] = new int[size];  
    std::fill_n(p_p_Board[i], size, 0);
}

或使用艾伦建议的vector