Array mit 0 Elementen?



  • Hi, also ich habe eine Methode geschrieben in der dynamisch ein array erzeugt wird, nun kommt es aber auch vor, das der Initialisierungswert bei 0 liegt, aber trtozdem wird ohne einen Laufzeitfehler ein array erzeugt und ich kann damit dann auch noch arbeiten, wie geht das?
    Und laufe ich da zufällig gefahr irgendwo hinzuschreiben wo ich es nicht unbedingt will, wenn ich über den Index hinausgehe(was ja schon bei 0 sein müsste)?

    void String::replace(char* oldString, char* newString) {
    
        if (getLength(oldString) == 0) {
            return;
        } else if (getLength(newString) == 0) {
            return;
        }
    
        for (int i = 0; i < length; i++) {
            if (regionMatches(false, i, oldString, 0, getLength(oldString))) {
                char *p1;
                p1 = value;
                char* buffer = new char[i]; // Alle chars vor i
                for (int j = 0; j < i; j++)  buffer[j] = p1[j];
                buffer[i] = '\0';
                int l = getLength()-i-getLength(oldString);
                char* buffer2 = new char[l]; // alle chars ab i und oldString
                int c = i + getLength(oldString);
                for (int k = 0; k < l; k++) buffer2[k] = p1[c++];
                buffer2[l] = '\0';
                value = buffer;
                concat(newString);
                concat(buffer2);
            }
        }
        length = getLength(value);
    }
    

    [ Dieser Beitrag wurde am 16.04.2003 um 15:32 Uhr von Pogo editiert. ]



  • Ein dynamisches Array der Größe 0 zu haben ist kein Problem, allerdings darfst du davon auch nur 0 Elemente verwenden 😉



  • Ja, aber was passiert denn dann?
    In meinem geposteten code mache ich nämlich genau das!
    Also ich weise z.B. buffer[0], 0 ist der Wert von i, den Wert '\0' zu.



  • Undefiniertes Verhalten. Das heißt es kann alles passieren ... von falschen Ergebnissen über Endlosschleifen, Abstürzen, explodierenden Monitoren bis zu Nasendämonen, oder sogar, dass es zufällig so funktioniert wie du dir das denkst.


Anmelden zum Antworten