我在确定我在这里做错了什么时遇到了一些麻烦,并且没有发现任何有相同问题的帖子。我正在使用一个动态的字符串数组来保存一个二进制树,其根位于[0],第一行是子项,从左到右,在[1]和[2]等。虽然我没有调试那个输出格式然而,我更担心的是为什么这条特定的线路会破坏我的程序。
我认为这是一个指针解引用问题,但是outStream << &contestList[i]
按照我的预期打印地址,而outStream << *contestList[i]
会抛出错误,正如我所期望的那样。
//3 lines are from other functions/files
typedef string elementType;
typedef elementType* elementTypePtr;
elementTypePtr contestList = new elementType[arraySize];
void BinTreeTourneyArray::printDownward(ostream &outStream)
{
int row = 1;
for (int i = 0; i < getArraySize(); i++)
{
outStream << contestList[i]; //this is crashing the program
if (isPowerOfTwo(i))
{
outStream << endl;
row++;
}
else
{
outStream << ":";
}
}
}
arraySize是私人会员arraySize = ((2 * contestants) - 1)
,其中contestants
是我锦标赛中参赛者的数量。树中的每一轮或“行”与锦标赛括号同义。如果有n个参赛者,那么树中需要2n-1个节点。问题不在于此功能。
getArraySize() { return arraySize; }
答案 0 :(得分:1)
原来elementTypePtr contestList = new elementType[arraySize];
就是问题所在。 contestList是该类的私有成员,然后我将此行放在一个函数中,声明一个同名的局部变量,该函数在函数结束后消失。没什么大不了的,除了我在打印功能中需要它...哎呀。