2017-12-03 16 views
1

여기 내가 잘못하고있는 것을 정확히 알아내는 데 어려움이 있으며 동일한 문제가있는 게시물을 찾지 못했습니다. [1]과 [2] 등에서 [0], 첫 번째 행의 왼쪽, 오른쪽에서 이진 트리를 유지하기 위해 문자열의 동적 배열을 사용하고 있습니다. 출력 형식을 디버깅하지는 않았지만 그러나, 나는 왜 그 특정한 노선이 나의 프로그램을 부수고 있는지에 관해서는 훨씬 더 걱정하고있다.문자열 포인터 배열 출력

포인터를 참조 해제하는 문제라고 생각했지만 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는 contestants 내 대회에서 참가자의 수는 개인 회원 arraySize = ((2 * contestants) - 1)입니다. 트리의 각 라운드 또는 "행"은 토너먼트 대괄호와 동의어입니다. n 명의 참가자가있는 경우 트리에 2n-1 개의 노드가 필요합니다. 이 문제는이 기능과 관련이 없습니다.

getArraySize() { return arraySize; } 
+0

'arraySize' 및'getArraySize'에 대한 코드 표시 – pepperjack

+0

_ "문자열 포인터 배열"_ Shudder! 코드에 _arrays_ 또는 _pointers_를 사용하는 간결한 이유는 무엇입니까? 제발 이것들에 대해 자세히 설명해 주시겠습니까? – user0042

+0

@pepperjack이 추가되었습니다. – ViscousRandom

답변

1

으로 밝혀졌습니다. elementTypePtr contestList = new elementType[arraySize];가 문제가되었습니다. contestList가 클래스의 private 멤버 인 경우 함수가 끝난 후에 사라지는 같은 이름의 로컬 변수를 선언하는 함수에이 줄을 던졌습니다. 아니, 인쇄 기능에 필요한 사실을 제외하고는 ... 아참.

+0

그리고 위의 질문에'unique_ptr'을 제안한 두 가지 이유를 설명합니다. 1. 이것은 당신이'contestList'를 생성 한 함수를 호출했을 때 당신이 누설되었다는 것을 의미합니다; 'unique_ptr'은 그것을 피했을 것입니다. 2. 더 중요한 것은'unique_ptr'을 사용하면 클래스 멤버가'nullptr'에 남아있게되어 디버깅이 훨씬 쉬워 졌을 것입니다. –