2017-06-18 4 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; 
}* 

Wenn ich Eingabe h als irgendetwas (zB 3) gebe, wird es immer noch funktionieren und Ausgabe drucken, aber die Array-Größe ist Null.Wie funktioniert dieser C++ Code?

+2

Fragen Sie wer auch immer es geschrieben hat? Schritt es mit einem Debugger? – Borgleader

+2

Sie haben gerade einen Puffer überlaufen korrumpierenden Speicher ... – VTT

Antwort

1

Arrays sind nicht flexibel, ihre Größe ist zum Zeitpunkt der Kompilierung festgelegt. Wenn Sie außerhalb der Grenzen gehen (die Sie werden tun mit einem Array von Null-Größe) haben Sie undefined Verhalten.

Wenn Sie ein "Array" möchten, das Sie bei run-time einstellen oder ändern können, dann verwenden Sie std::vector.

+0

aber Array-Größe ist Null, so dass dies zur Laufzeit aber sein Lauf und Druckausgabe fehlschlagen sollte. Wie? –

+0

@kamleshsolanki Eine der Möglichkeiten von undefiniertem Verhalten ist leider, dass es vollkommen in Ordnung zu funktionieren scheint. –

+0

Die C-Sprache überprüft Array-Grenzen während der Laufzeit nicht. Das würde die C-Sprache weniger effizient machen. –