Problem mit Zeigern bzw. NEW <- Hat den keiner ne Idee???



  • Hi
    ich habe volgenden Code:

    char **levelMatrix;
      TColor **FastBack;
    
      levelMatrix=(char**)malloc(200*sizeof(char**));
      for(int i=0; i<200; i++)
        levelMatrix[i]=(char*)malloc(levellenght*sizeof(char*));
    
      FastBack = (TColor**)malloc(levellenght * sizeof(TColor**));
      for(int i = 0;i < levellenght;i++)
        FastBack[i] = (TColor*)malloc(200 * sizeof(TColor*));
    

    Damit will ich verhindern das ich immer speicherzugriffsverletzungung bekomme wie es bei arrays der fall war.

    Hier bei bekomme ich aber die Fehlermeldung:
    [C++ Fehler] HanfmanU.cpp(745): E2277 L-Wert erwartet
    //Zeile 745 = levelMatrix=(char**)malloc(200*sizeof(char**));
    [C++ Fehler] HanfmanU.cpp(747): E2277 L-Wert erwartet

    Der gleiche Code lässt sich aber so in VC++ compilieren

    Komischerweise klappt der gleiche code bei TColor aber nicht bei char!

    Nun habe ich das von Char so umgeändert:

    levelMatrix = (char**)malloc(200 * sizeof(char**));
    for(int i = 0;i < 200;i++)
      *levelMatrix[i] = (char)malloc(levellenght * sizeof(char*));
    

    so lässt er sich zwar compilieren aber die stuck errors bei starten der exe bekomme ich dann immernoch!

    Was kann ich tun?

    THX

    Dagsta

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!



  • Dein ursprünglicher Code lässt sich im BCB6 problemlos kompilieren.



  • komisch in einem neuen project geht der code nur im bestehenden nicht jemand ne idee woran das liegen kann?



  • Der Compiler sagt sich bestimmt "Hey, ich bin eine C++-Compiler, ich hab langsam die Nase voll von dem malloc-Gewurstel!" 😉



  • ... Hey, ich bin eine C++-Compiler ...

    Womit Jansen sicherlich auf das Vorhandenseins von new hinweisen will 😃



  • Ne, ne.
    New ist zu "neu", daß wird sich nicht durchsetzen.

    Aber nun mal im Ernst, hat von euch keiner ne idee worann das liegen kann



  • also mit new klappt es auch nicht:

    char (*levelmatrix)[levellenght];
      TColor (*FastBack)[200];
     levelMatrix = new char[200][levellenght];
     FastBack = new TColor[levellenght][200];
    
     delete FastBack;
     delete levelMatrix;
    

    [C++ Fehler] HanfmanU.cpp(756): E2277 L-Wert erwartet

    Woran kann den das nur liegen?



  • Hat den keiner ne Idee was ich machen kann, damit ich das auch in meinem bestehenden Project verwenden kann!
    Habe schon die cpp dateien einzeln geladen und ein neues project erzeugt aber auch da ging es nicht!

    Es kann doch nicht sein, dass das nicht machbar ist! ODER???

    Hoffe mir kann einer Helfen!

    THX

    DAGSTA



  • 1. dein code von ganz oben lässt sich bei mir ohne fehler compilieren
    2. mal schreibst du "levelmatrix" und ein anderesmal "levelMatrix". ich würd mich mal für eins entscheiden
    3. dein versuch mit new ist ein ganz schöner pfeffer. ich würd dir mal empfehlen ein c++ buch aufzuschlagen und nachzuschauen was new eigentlich macht
    4. length wird mit "th" und nicht mit "ht" am ende geschrieben

    so, genug der kritik, versuch mal folgendes

    int LevelLength = 100;
    char **LevelMatrix;
    LevelMatrix = new char*[200];
    for(int i=0; i<200; i++) LevelMatrix[i] = new char[LevelLength];
    
    for(int i=0; i<200; i++) delete[] LevelMatrix[i];
    delete[] LevelMatrix;
    

    und vergiss nicht nachzulesen was new macht 😉



  • Jester2000 schrieb:

    _10 int LevelLength = 100;
    _20 char **LevelMatrix;
       ...
    758 LevelMatrix = new char*[200];
    759 for(int i=0; i<200; i++) 
    760   LevelMatrix[i] = new char[LevelLength];
    
    for(int i=0; i<200; i++) 
      delete[] LevelMatrix[i];
    delete[] LevelMatrix;
    

    gibt den Fehler:
    **[C++ Fehler] HanfmanU.cpp(758): E2277 L-Wert erwartet
    [C++ Fehler] HanfmanU.cpp(760): E2277 L-Wert erwartet
    **
    Genau wie immer
    aber nur in dem einen project



  • Hallo,

    Kann das sein, dass du LevelMatrix irgendwo schon einmal deklariert hast (z.Bsp. als Funktion) ?

    Ciao


Anmelden zum Antworten