2014-05-11 3 views
1

숙제는 동물 클래스에있는 3 클래스 배열 (새, 포유류, 파충류)을 포함하는 클래스 (레지스터)를 만들어야한다는 것입니다. 동물은 등록자의 친구입니다. 나는 새들의 부분을 보여줌으로써 그것을 단순하게 유지할 것이다.클래스 내부의 클래스 배열 - 동적 배열 문제 (C++)

class Register 
{ 
    Bird* birds; 
    unsigned int birdSize; 
public: 
    ... 
} 

레지스터의 생성자 :

이제 새 배열 한 요소를 추가 레지스터의 기능을
Register::Register() 
{ 
    this->birds = new Bird[0]; 
    this->birdSize = NULL;  
} 

상기 입력 CIN이다

레지스터 클래스처럼 보인다.

void Register::add() 
{ 
... 
     if (birdSize == 0) 
     { 
      birds = new Bird[0]; 
      Bird* temp = new Bird[0]; 
      temp[0].add(); 
      this->birds = temp; 
      birdSize++; 
     } 
     else 
     { 
      Bird* temp = new Bird[birdSize+1]; 
      for (unsigned int i=0; i<=birdSize; i++) 
      { 
       temp[i] = this->birds[i]; 
      } 
      temp[birdSize+1].add(); 
      birds = new Bird[birdSize+1]; 
      birds = temp; 
      birdSize++; 
     } 

임시 주소 .add()에는 cin이 있으며 제대로 작동합니다. 프로그램을 실행할 때 사용자는 배열에 2 마리의 새를 추가해야합니다. 문제는 'else'아래에있는 부분에 도달 할 때 발생하므로 배열의 두 번째 요소입니다. 프로그램은 반드시 "temp [birdSize + 1] .add();"에 도달합니다. 실행 중일 때 "xyz.exe가 작동을 멈췄습니다."창이 뜨고 "Fault Module Name : StackHash_7e8e"라는 메시지가 표시되므로 메모리 할당에 문제가있는 것이 확실하지만 문제는 그 때입니다. 디버그 모드에서 문제가되는 행을 찾으려면 모든 것이 잘 작동합니다.

음, 모든 것이 아닙니다. 이 프로그램은 print() 함수를 가지고 있으며 Register에있는 모든 것을 출력합니다. 배열의 두 번째 요소는 첫 번째 요소와 같습니다.

나는 무엇을 해야할지 전혀 모른다. 많은 포럼 게시물을 읽고 cpp 책을 읽고 온라인 자습서를 시청했지만이 문제에 대한 해결책을 찾을 수 없습니다. 도와주세요.

+1

_Dynamic arrays_는 C++에서'std :: vector <>'인스턴스입니다! 내 말은 –

답변

2

배열 색인은 0부터 시작합니다. > birdSize, 하지 birdSize + 1-else 부분에 당신이

Bird* temp = new Bird[birdSize+1]; // size =birdSize +1; 

그래서 유효한 인덱스 범위가 0입니다 쓰고있다 그래서.

문제는 당신이 인덱스 일 birdSize+1 사용하는

temp[birdSize+1].add(); 

입니다. 그것은 당신의 코드에서 다른 버그가 있습니다

temp[birdSize].add(); 

해야한다 :

for (unsigned int i=0; i<=birdSize; i++) // should be i<birdSize 
{ 
    temp[i] = this->birds[i]; 
} 

프로그램에서 다른 나쁜 코딩이있다 : 당신의 숙제를 요구하지 않는 경우에 분명히

Register::Register() 
{ 
    this->birds = new Bird[0]; // should be this->birds=NULL 
    this->birdSize = NULL; // should be this->birdSize = 0 
} 

그리고는 이런 식으로 array을 사용하면 안됩니다. 가변 크기 컨테이너의 경우 vector, list...을 사용하십시오. Array인 경우에만 고정됩니다.

+0

입니다. 벡터를 사용하여 재 프로그램 할 것입니다. 그런 다음 어떻게 진행되는지보고 할 것입니다. 고맙습니다! – nandoo

+0

물론, 그것을하고 싶었지만 5 분의 시간 제한이 있습니다. 다시 감사합니다. – nandoo

+0

모두 작동하며 벡터로 작업하는 것이 좋습니다. 감사. – nandoo