2017-06-18 25 views
-8
*#include <iostream> 
using namespace std; 
class Tree{ 
    static int height[0]; 
public: 
    static int countBalanceTree(int h){  
     height[0]=height[1]=1; 
     for(int i=2;i<=h;i++){ 
      height[i]=height[i-1]*(height[i-1]+2*height[i-2]); 
     } 
     return height[h]; 
    } 
}; 
int Tree::height[]; 
int main(void){ 
    int h; 
    cout<<"Enter height = "; 
    cin>>h; 
    cout<<(Tree::countBalanceTree(h))<<" Balanced Tree can be create of height "<<h<<endl; 
    return 0; 
}* 

入力hを何か(例えば3)として与えても、それでも出力されますが、配列サイズはゼロです。このC++コードはどのように動作しますか?

+2

誰にでも書きましたか?それをデバッガでステップスルーしますか? – Borgleader

+2

ストレートバッファオーバーランがメモリを壊すだけです... – VTT

答えて

1

配列は可変ではありませんが、配列はコンパイル時に固定されています。あなたが範囲外になる場合(は0サイズの配列となります)、は未定義の動作になります。

run-rimeでサイズを設定または変更できる「アレイ」が必要な場合は、std::vectorを使用します。

+0

しかし、配列サイズはゼロです。これは実行時に失敗するはずですが、実行中の出力と印刷出力です。どうやって? –

+0

@kamleshsolanki未定義の動作の可能性の1つは、残念ながら、完全に正常に動作するようです。 –

+0

C言語では、実行時に配列境界をチェックしません。それはC言語の効率を低下させます。 –

関連する問題