我希望找出我是否正确初始化了这个数组,因为当我显示它时,它不会显示我认为它应该显示的内容。这是代码:
#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,但其余的不是。这是正确的还是我的代码中有错误?
答案 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