我正在尝试将二叉树实现为2d数组。我希望用户输入所需的树高,程序应提供适当的大小数组。然后,我要打印数组,这就是为什么我需要将其作为参数传递的原因。但是,出现以下错误:
拜托,是什么导致了错误,我该如何解决?
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
void printTree(string** tree);
int main()
{
int treeHeight = 0;
int maxNumberOfNodes = 1;
cout << "enter tree height";
cin >> treeHeight;
cout << treeHeight<< "\n";
//create an array that can hold every combination for a given tree height
maxNumberOfNodes = pow(2,treeHeight) - 1;
string** tree [3][maxNumberOfNodes];
cout << maxNumberOfNodes;
printTree(tree);
}
void printTree(string** tree){
//not fully implemented yet
for(int i=0; i < sizeof(tree); i++){
cout << "*" << " ";
}
}
最佳答案
string** tree [3][maxNumberOfNodes];
是string **类型的静态2D数组的语法,其中两个维度都必须声明为const。
静态数组和动态数组之间的区别如下所示:Multidimensional variable size array in C++
相反,您想要写类似
string** tree = new string*[3];
for(int i = 0; i < 3; i++)
tree[i] = new string[maxNumberOfNodes];
正如@Remy Lebeau所说:每次
new[]
都需要通过delete[]
调用来回答,如下所示:for (int i = 0; i < 3; i++)
delete tree[i];
delete[] tree;
从堆中删除动态分配。
就像@drescherjm指出的那样,
sizeof(tree)
无效,因为tree
只是一个指针,不包含有关数组的大小信息。您可以通过另外传递数组的尺寸来解决此问题:
void printTree (string** tree, int dim, int dim2)
并将循环重写为
for(int i = 0; i < dim; i++){
for(int j = 0; j < dim2; j++){
cout << tree[i][j]; //...
}
}