2016-11-20 3 views
0

int star = new int;을 선언했으며 값을 star에 넣었습니다. 다음과 같음 :C++ 동적 할당에서 arraysize를 얻는 방법?

int *star = new int; 
int i,j = 0; 
for (i = 0; i < length; i++) 
{ 
    if(words[i] == '*') 
    { 
     star[j] = i; 
     j++; 
    } 
} 

이제 star 크기에 대해 알고 싶습니다. 내가 sizeof()_msize()을 시도했지만 작동하지 않아 유형의 크기를 읽었을뿐입니다.

+0

이미지가 아닌 코드를 여기에 붙여 넣으십시오. – abdul

+2

'star'는 배열이 아닙니다. – 0x499602D2

답변

0

star은 단일 정수를 가리키는 포인터입니다. 따라서 length은 1로 설정해야합니다. star[0]은 괜찮지 만 star[1]은 범위를 벗어납니다. 그런데 동적 할당을 사용하는 경우 끝에 delete star;을 잊지 마세요.

sizeof(star)은 할당 된 요소의 수가 아니라 포인터의 크기를 알려줍니다. 당신이 동적 크기를 알고 싶다면

, 사용자가 스스로를 추적 할 수 있습니다

size_t length = 15;   // or any number you want 
int *star = new int[length]; // this time you've allocated an array 
... 
delete[] star;    // if you allocate an array, don't forget the [] 

대안은 필요에 따라 성장하고, 돌볼 수, 완전히 동적 vector<int>을 사용하는 것입니다 그들은 더 이상 필요하지 않습니다 해제 : 당신은 정확히 배열 (와 마찬가지로 멤버에 액세스 할 수 있습니다

vector<int> star; // empty vector created 
    ... 
     star.push_back(i); // add an element 
    ... 
    j=star.size(); // in fact you don't need j anymore 

예를 들어 star[k])

+0

길이가 얼마나되는지는 아무도 모릅니다. 입력이 3이면 크기는 3입니다. 그게 내가 C에서 malloc을 원했던 것입니다. 그 함수를 만들고 싶습니다. 그런 다음 벡터를 사용합니까? –

+0

@ 이상훈 벡터가 더 쉬울 것입니다 (편집 참조) – Christophe

0

Y ou는 스타를 하나의 정수로 배열로 선언하지 않았습니다. 파일의 '*'가 파일에 몇 번 있었는지 확인하는 것이 목적이라면 int count = 0의 정수를 만들고 word[i] == '*' 때마다 count++;을 수행해야합니다.

+0

다음 어떤 종류의 기능을 사용합니까? 나는 C에서 malloc과 같은 효과를 원한다. –

+0

나는 그것을 좋아했다. 동적 할당을 사용하는 방법을 알고 싶습니다. –