Seite 1 von 1

C++ Dim Array

Verfasst: 17.07.2008 18:49
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^^

Re: C++ Dim Array

Verfasst: 19.07.2008 14:46
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.

Verfasst: 20.07.2008 17:36
von Artus
Ok, vielen Dank.

MfG Arthur