[英]How do I allocate a 3D array in C++ on the free store?
我目前正在学习如何在 C++ 中使用原始指针。 我了解如何动态分配 2D 数组,但是,作为我自己的练习,我尝试应用我对多个间接级别的理解来分配 3D 数组。 我的尝试如下所示:
int main() {
double*** matrix { new double**[10] {} };
for (size_t i {}; i < 10; ++i) {
matrix[i] = new double*[i + 1] {};
for(size_t j {}; j < 10; ++j) {
matrix[i][j] = new double[i + 1] {};
}
}
std::cout << matrix[0][0][0] << std::endl;
for (size_t i {}; i < 10; ++i) {
for (size_t j {}; j < 10; ++j) {
delete[] matrix[i][j];
matrix[i][j] = nullptr;
}
delete[] matrix[i];
matrix[i] = nullptr;
}
delete[] matrix;
matrix = nullptr;
return 0;
}
由于我使用的是统一初始化,所以 matrix[0][0][0] 应该打印值 0.0; 但是,这样做时我得到了一个垃圾值。 此外,我有一个double free or corruption (out)
错误,我认为这告诉我我试图从同一地址释放 memory 两次。
任何帮助或指导将不胜感激。 我只是想完全理解原始指针。
编辑:我知道 double*** 实际上不是 3D 数组。 我只是想使用简单的术语。
matrix[i] = new double*[i + 1] {};
for(size_t j {}; j < 10; ++j) {
这是你的错误,你分配一个'i + 1'元素的数组,然后循环10,你要么需要在两个地方都有i + 1,要么10,否则这是未定义的行为。 这同样适用于删除(循环检查 10 但您只分配了 i + 1)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.