C++ Dim Array

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Artus
Beiträge: 280
Registriert: 15.01.2005 20:53

C++ Dim Array

Beitrag von Artus »

Hio Leute,
ich will gerade eine Klasse für dynamische Arrays schreibenm aber ich glaub da is ein Fehler -.- Tut "new" nicht den Speicher NULLen bevor er ihn vergibt?
Denn wenn ich die Array ausgebe steht da immer was drinn -> Fehler beim auslesen.

die Include

Code: Alles auswählen

template <class T>
class DimArray
{
    private:
        T       *mArray;
        int     mA;
        int     mB;
        int     mC;


    public:


        DimArray(int A, int B)
        {
            mA = A;
            mB = B;

            mArray = new T[mA * mB];
        };

        ~DimArray()
        {
            delete [] mArray;
        }


        T* operator[](int A)
        {
            return& mArray[A * mB];
        };



};
test:

Code: Alles auswählen


DimArray<int> Array(6,3);


 Array[0][0] = 42;
    Array[1][0] = 10;
    Array[0][1] = 5;

fprintf(stderr, "Array: %i\n",Array[0][0]);
fprintf(stderr, "Array: %i\n",Array[1][0]);
fprintf(stderr, "Array: %i\n",Array[2][0]);
fprintf(stderr, "Array: %i\n",Array[3][0]);
fprintf(stderr, "Array: %i\n",Array[0][1]);
fprintf(stderr, "Array: %i\n",Array[1][1]);
fprintf(stderr, "Array: %i\n",Array[2][1]);
fprintf(stderr, "Array: %i\n",Array[3][1]);
fprintf(stderr, "Array: %i\n",Array[0][2]);
fprintf(stderr, "Array: %i\n",Array[1][2]);
fprintf(stderr, "Array: %i\n",Array[2][2]);
fprintf(stderr, "Array: %i\n",Array[3][2]);
fprintf(stderr, "Array: %i\n",Array[0][3]);
fprintf(stderr, "Array: %i\n",Array[1][3]);
fprintf(stderr, "Array: %i\n",Array[2][3]);
fprintf(stderr, "Array: %i\n",Array[3][2]);

mfg Arthur^^
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: C++ Dim Array

Beitrag von Danilo »

Artus hat geschrieben:Tut "new" nicht den Speicher NULLen bevor er ihn vergibt?
Richtig, es wird nicht mit 0 initialisiert.

Wenn Du irgendeine Speichergröße anforderst, geht es somit schneller,
als wenn alles immer und überall mit 0 initialisiert wird.
Danach kannst Du dann mit diesem Speicher machen was Du möchtest.
Willst Du es alles auf 0 haben, dann machst Du halt eine Schleife zum Nullen.

int *x = new int; // nicht initialisiert
int *x = new int(0) // konstruktor wird mit argument 0 aufgerufen

Arrays kann man nicht gleichzeitig initialisieren, der Inhalt ist also unbestimmt,
und Du kannst danach eine Schleife machen um die enthaltenen Objekte mit
einem Wert zu initialisieren.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Artus
Beiträge: 280
Registriert: 15.01.2005 20:53

Beitrag von Artus »

Ok, vielen Dank.

MfG Arthur
Antworten