2016-11-20 5 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]はOKですが、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 starは配列として、むしろ単一の整数として宣言していません。ファイルの中に「*」が何回現れているかを調べる場合は、int count = 0の整数を作成し、word[i] == '*'のたびにcount++;を実行する必要があります。

+0

then私はどのような機能を使用しますか?私はCでmallocと同じ効果が欲しいです。 –

+0

私はそれを好きでした。ダイナミックアロケーションの使い方を知りたい –

関連する問題