2013-05-07 4 views
0

나는 갑과 전화라는 두 가지 값을 가진 Card 객체로 구성된 Deck라고하는 동적으로 할당 된 배열을 가지고 있습니다. 내가 양을 변경하는 경우 갑판의 요소의 양을 결정하는 방법을 잘 모르겠어요동적으로 할당 된 배열의 요소 수 찾기

deck = new Card[52]; 

:

은 내가 그래서 선언 갑판 배열에서 카드의 번호를 찾을 필요 카드를 갑판 배열에 넣습니다. 지금은이 :

getNumber()는 카드의 숫자 값을 끌어 기능입니다
int size=0; 
Card a; 
while (a.getNumber() != '/0'){ 
    size++; 
    a = deck[size]; 
} 

. 더 좋은 방법은 std::vector<Card>를 사용하고,

struct Deck { int nCards; Card *cards; } 

또는 그러나 나는 프로그램입니다 실행할 때이

이 C++에서 가능하지 않다, 또는 C
+0

백 슬래시가있는 '\ 0'이고 ** ''/ 0 '이 아닌 **입니다. –

+0

아! 감사. 이제 작동합니다. – user2105982

+0

크기를 찾는 문제는 아닙니다. 그것은 당신이 버린 정보를 복구하는 문제입니다. 그리고 대답은 : 그것을 버리지 마십시오. 나중에 크기가 필요할 경우, 어딘가에 기록하십시오. 그것은'std :: vector'가하는 것입니다. –

답변

2

당신은 구조를 만들 필요 "프로그램의 작동이 중지되었습니다"라는 , 그것은 당신을 위해 이미 그것을합니다. 당신은 정말 구조를하지 않으며, 어떤 이유로 배열의 끝을 표시하기 위해 null로, 벡터를 사용 더미 카드 포인터를 할당하고이를 설정하지 않으려면 : 당신은 어느 것

deck = new Card[52+1]; 
deck[52] = 0; 
while (deck[i]) { /* ... */ } 
+0

필 레보 그 (Pileborg)가 말한 코드로 바꿨습니다. – user2105982

0

을 그 수를 배열과 별도로 저장하려면 C 문자열과 같은 것을하고 센티넬 값을 사용하여 배열의 끝을 나타내거나 실제로 C++로 프로그래밍하고 성장 및 축소 할 수있는 벡터를 사용할 수 있습니다.

0

"프로그램이 작동을 멈췄다"고 말하면 무슨 뜻인지 알 수 없습니다. 그것은 일종의 예외 메시지라고 생각합니다.

그러나 코드에서 버퍼 오버플로 (배열 인덱스가 범위를 벗어남 예외)가 발생할 수 있습니다. 배열의 52 개 슬롯이 모두 차지한 다음 52 번째 반복에서 크기 변수의 값 갑판 배열 (52 개의 슬롯 집합이 미리 할당 됨)에서 잘못된 색인 액세스로 이어지는 52가됩니다.

또한 초기화 단계에서 바로 크기를 설정하기 때문에 이것은 동적으로 할당 된 배열이 아닙니다.

관련 문제