Initialisierung von Arrays



  • > Für jedes form element wird der standard konstruktor aufgeführt

    der Standard Konstruktor hat doch keine Auswirkungen auf das data Array, also ist mir das egal

    > das struct form müsste also in einem Konstruktor (ohne parameter) die werte von seinen membern definieren.

    ???



  • Hi,

    na ja, was ist denn die standardmäßige Initialisierung von einer gewöhnlichen Variablen?

    int a;
    

    denke in deinem Beispiel wird es genau so sein. 😉

    MfG Eisflamme



  • > das struct form müsste also in einem Konstruktor (ohne parameter) die werte von seinen membern definieren.

    aso - manchmal dauert es halt mal länger 😉 - ich behaupte jetzt einfach es liegt an der Uhrzeit - ich bin sicherlich übermüdet oder so...

    (Hilfe! jetzt bin ich ein gefundenes Fressen für TGGC 😃 )



  • #include <iostream>
    using namespace std;
    
    struct form
    {
    	char h;	
    	char b;	
    	double data[4][4];
    };
    
    const form s_01_1 = {2, 3, {{1,1,1}, {0,1,0}}};
    
    int main()
    {
    
    	cout<<"Hallo Welt"<<endl;
    
    	for(int y = 0; y < 4; y++)
    	{
    		for(int x = 0; x < 4; x++)
    		{
    			cout<<s_01_1.data[x][y];
    		}
    		cout<<endl;
    	}
    
    	double x;
    	cout<<x<<endl;
    }
    

    Ausgabe dazu:

    Hallo Welt
    1000
    1100
    1000
    0000
    -9.25596e+061
    Press any key to continue
    

    Erstaunlicher Weiße stehen aber im Array immer sinnvolle Werte? liegt das an meinem Compiler?



  • obiger code wurde mit MSVC 6.0 unter WinXP ausgeführt
    unter Linux mit g++ bekomm ich ähnliche Ergebnisse:

    Ausgabe:

    Hallo Welt
    1000
    1100
    1000
    0000
    9.66126
    

    liegts jetzt am Compiler - ist es einfach nur Zufall - oder verlangt das der C++ Standard so?



  • Wenn ich den Code mit MSVC 7.1 ausführe bekomme ich eine Schutzverletzung:

    Run-Time Check Failure #3 - The variable 'x' is being used without being defined.
    


  • was sind den bitte sinnvolle werte ?
    ein int kann nur einen int wert haben. also wird ein int immer int sein...
    haste jetzt erwartet, dass dein int wert mit einem string gefüllt wird ?
    ich würd sagen die variable hat den wert, den dieser speicherbereich hat. speicher wird ja nicht auf 0 zurückgesetzt, wenn dieser freigegeben wird.



  • > Wenn ich den Code mit MSVC 7.1 ausführe bekomme ich eine Schutzverletzung:

    was passiert wenn du x weg läßt?

    > was sind den bitte sinnvolle werte?

    bei einem numerischen Typ wäre für mich als Initialisierungswert 0 sinnvoll (aus der sicht meines Programmes wäre 0 sinnvoll - ob das bei anderen Programmen auch sinnvoll ist weiß ich nicht)

    > ich würd sagen die variable hat den wert, den dieser speicherbereich hat. speicher wird ja nicht auf 0 zurückgesetz

    also du sagst das ist zufall - und das hat der Compiler intern nicht irgendwie mit 0 initialisiet - bzw. der C++ Standard verlangt es auch nicht so

    das komische dabei ist halt das die Double Werte im Array, sinnvolle Werte enthalten, obwohl sie nicht initialisiert wurden - und ein einzelner double Wert eigentlich immer irgendwelchen Unsinn (Wert ungleich 0) enthält



  • wie gesagt, was ist sinnvoll ?
    bei einem Sprite (DirectX) object ist es nicht sinnvoll die skalierung auf 0 zu haben. weil dann ist size * 0 = 0 und der object wird nicht angezeigt und man wundert sich wieso.
    es war halt zufall das die werte auf speicherbereiche erstellt worden sind die 0 waren. wenn du den pc über tage laufen lässt müsste die wahrscheinlichkeit gegen 0 sinken.



  • > waren. wenn du den pc über tage laufen lässt müsste die wahrscheinlichkeit gegen 0 sinken.

    naja... da ich Student bin habe ich Zugriff auf das Rechenzentrum - die PCs dort werden eigentlich nie ausgeschaltet - nur wenn Stromausfall ist 😉 - auf dem hab ich das Programm auch laufen lassen mit gleichen Ergebnissen

    auf meinem Heimrechner nach etwa 2 Tagen gab es auch keine anderen Ergebnisse (für die Werte des Arrays - für x ist iregendein beliebiger Wert herausgekommen)

    aber ich kann jetzt mal festhalten

    const form s_01_1 = {2, 3, {{1,1,1}, {0,1,0}}};
    

    ist was anderes wie:

    const form s_01_1 = {2, 3, {{1,1,1,0}, {0,1,0,0}, {0,0,0,0}, {0,0,0,0}}};
    

    da das gleiche dabei rauskommt ist reiner zufall - bzw. vielleicht liegts ja wirklich am Compiler - auf jeden Fall ist das erste Codefragment nicht mit dem zweiten Codefragment in der Wirkung gleich nach dem C++ Standard - ich dachte da der C++ Standard auch definiert wie Compiler so etwas handhaben, könnte es vielleicht sein das beides die gleiche Wirkung hat...


Anmelden zum Antworten