2012-08-30 3 views
0

C++에서 동적 할당 배열의 크기를 얻는 방법은 무엇입니까?C++에서 int의 동적 할당 배열의 크기를 얻는 방법

예 : (그것은 INT의 크기의 4 32 비트 = 8 * 4로 /이 항상 줄 것이다)

bool tabSum(int* t, int& p, int& np){ 
    cout<<"\n\n"; 
    cout<<sizeof(*t)<<endl; 
} 
+2

할당 할 때 크기가 알려지지 않았습니까? – 0605002

+1

@FlopCoder 동적 할당은 런타임에 이미 알고 있으므로 여기에 나와 있습니다. –

+2

짐작할 수 있지만 크기를 제공해야합니다! _unspecified_ 메모리를 할당 할 수 있습니까? – 0605002

답변

7

당신은 포인터로 배열 붕괴는 매개 변수로 전달 할 수없는 경우. sizeof은 컴파일 타임 연산자입니다.

대신 std::vector을 사용하시기 바랍니다.

+0

hwo가 함수에 전달 된 배열의 크기를 얻는 것을 알고 있다면 (어쩌면 다른 방법으로 말해주십시오.) 벡터 나 다른 콜렉션을 사용하고 싶지 않습니다. – Yoda

+1

@RobertKilar는 크기를 매개 변수로 전달합니다. 이것은 드문 일이 아닙니다. –

+0

지나가는 것 (명백하고 불행히도 ...)? sizeof는 절대로 작동하지 않을까요? 코드와 함께 – Yoda

4

불가능합니다.

인수로 포인터를 사용하고 배열로 예상하는 모든 유용한 함수는 항상 요소 수를 나타내는 두 번째 매개 변수를 취합니다.

STL에서 사용되는 또 다른 접근법은 배열의 마지막 항목보다 한 단계 앞선 포인터를 끝 경계로 사용하는 것입니다. STL 반복자는 begin() 및 end() 메서드를 사용하여이 접근 방식을 추상화합니다. 이 방법을 사용하면 size_t와 같은 별도의 숫자 데이터 유형을 사용할 필요가 없습니다.

이 룰에 주목할만한 예외는 NULL 종료 문자열을 예상하는 문자열 기능입니다. 그러나 특정 접근법은 보안 문제가 발생하기 쉽고 std :: string 클래스를 선호하는 접근 방식으로 사용합니다.

+0

두 번째 매개 변수는 C++ 반복자 패턴과 비슷한 C++ – Cubbi

+0

네, 실제로 더 현명한 하나 끝난 포인터 일 수 있습니다. 예제를 제공해 주시겠습니까? 필자는 언급 한 패턴을 사용하는 http://www.cplusplus.com/reference/iostream/istream/getline/을 발견했습니다. 당신이 표준 라이브러리 예제를 찾고 있다면 – SirDarius

+0

, 배열로 작업 할 수 있습니다 거의 모든 이미 (두 개의 포인터 포함)이 임의 접근 반복자 계정으로 템플릿을 찍을 때 – Cubbi

0

이 작업을 수행 할 수 없습니다. 이미 다른 용도로 언급했듯이 길이를 여분의 변수로 유지하거나 malloc/realloc 클래스를 직접 작성하여 도움을 줄 수 있습니다.