如何在C++中声明动态2D常量数组



我认为以下代码可以工作。但是,它打印第一行,然后抛出分段错误。

const unsigned **grid = new const unsigned*[10]{new const unsigned[10]{0}};
for (int r = 0; r < 10; r++)
{
for (int c = 0; c < 10; c++)
{
std::cout << grid[r][c] << " ";
}
std::cout << std::endl;
}

有人知道我(可能是天真地(做错了什么吗?

以下是一些使用动态分配的选项(当然,使用自动分配更简单(:

// should be delete[]'d at some point in future
auto* arr1 = new const unsigned[10][10]{};
// #include <memory>, C++14
auto arr2 = std::make_unique<const unsigned[][10]>(10);
// #include <vector>
auto const arr3 = std::vector<unsigned>(100);  // use index math
// #include <array>
using A10 = std::array<unsigned, 10>;
auto const arr4 = std::vector< A10 >(10, A10{});

最新更新