Mehrdimensionales CArray



  • hab mich leider zu früh gefreut 😞
    bekomme nach dieser Zeile

    typedef double array[2][21][3000] arraytypname;
    

    gleich den fehler:
    Berechnungen.cpp(27) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'arraytypname'
    Berechnungen.cpp(27) : error C2065: 'arraytypname' : nichtdeklarierter Bezeichner

    und noch etwas ist mir aufgefallen: ich erzeuge ja in Berechnungen ein Objekt der Klasse Zeichnen, also bringt es mr ja gar nix, wenn ich in Berechnen eine GetArray Methode habe, ich brauch ja in Zeichnen eine Methode, die das Array aus Berechnen übernimmt.



  • F***, ja ich hab Schrott geschrieben, jetzt wo ich es lese...

    aber ich weiß nicht mehr, wie das richtig wäre. *schäm*

    Zu deiner Erkenntnis:
    Gib das Array doch gleich dem Objekt in den Konstruktor.



  • Im Konstruktor übergeben geht ja net weil ich wie gesagt um die 30 Arrays habe. Ist die Speichervergeudung wirklich so groß, wenn ich die Arrays per Schleife kopiere? Die Laufzeit ist eigentlich sehr gut. Oder hast du eine Idee, wie ich das ganze sonst noch realisieren könnte?? Habs auch schon mit vector aus der STL probiert, hatte aber auch keinen Erfolg. Ich kann mir einfach nicht vorstellen, dass es keine oder nur sehr umständliche Möglichkeit gibt, dynamische, mehrdimensionale Arrays zu erzeugen und diese auch an andere Klassen zu übergeben 😕
    Weiß denn gar niemand Hilfe, ich verzweifle noch 😞 😞 😕



  • Wenn du ein Array kopierst brauchst du den doppelten Speicher (hast ja zwei Arrays).

    Kleines Rechenbeispiel:
    Der Einfachheit halber ein char array.

    sieht dann so aus:
    char array[2][21][3000];

    Macht 2*21*3000 Byte = 126KB.

    Du hast 30 Arrays:
    126KB * 30 = 3780KB das sind fast 4 MB.

    Ein schlechter PC hat maximal 128BM RAM, das ist nur 32 mal mehr... (32 solche Programme und dein Speicher is futsch.)

    Ich finde das ist viel. Zumindest als Preis für "Das ist so viel einfacher...".

    Ich könnte dir jetzt zusätzlich einen Vortrag über die erhöhte Laufzeit halten, aber das kannst du ja auch ausprobieren.
    Lass dir mal die Zeit geben für:

    for (int s = 0; s < 3780000; s++)
        int x = 1;
    

    bzw.

    int x = 1;
    

    Vielleicht kannst du es ja auch sehen...

    Hast du schonmal im C Forum wegen dem typedef gefragt? Oder mal nachgeschaut? In einem Buch? Im Netz?



  • Hm, das stimmt natürlich, hab mal im Taskmanager nachgeschaut, mein Prog bruacht 24MB Speicher...
    In Büchern und INet hab ich schon gesucht, aber leider nix gescheites gefunden. Im C Forum werd ich wohl noch fragen...
    Aber ich hab noch eine andere Idee: wäre es evtl besser, wenn ich die Arrays mit new anlege und lösche, sobald sie nicht mehr gebraucht werden? Wäre das evtl ein Kompromis?!



  • Das mit new wäre wirklich ein Kompromiss.

    Vielleicht könntest du das beim new sogar so machen, dass du dir nur so viel holst, wie du brauchst - das wäre richtig gut.

    Vielleicht fällt dir bei dem Umbau auch gleich ein (auf), wie du einen Zeiger auf dein Array kriegst. Dann wäre doch das mit dem Kopieren überflüssig.

    Ich guck jetzt nochmal in meine alte Mappe, ob da was passendes drin steht.

    🙂



  • Okay, dann werd ich das doch gleich mal alles umstellen!
    Das wär super, falls du was findest poste einfach nochmal!
    THX!!



  • Ich poste dir jetzt einfach mal die Links zu typedef, die ich gut finde:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndeepc/html/deep08032000.asp
    http://c.mincando.pe.kr/c_097.htm
    http://www.iplusplus.com/CppRef/Typedef_Specifier.html
    und hier dein Problem in einem englischen Forum: http://www.mainframeforum.com/t423883.html

    Und der Beitrag hier ist auch noch interessant für dich: http://www.tutorials.de/tutorials65918.html

    Viel Spaß beim Lesen

    PS: Meine Mappe ist leider gerade nicht auffindbar - aber es gibt ja das Internet. 😉



  • So, jetzt hab ich mal alles mit new gemacht, hab jetzt nen Speicherverbrauch von ca. 6MB in der Release Konfig. Denk das ist soweit okay, Laufzeit ist auch gut!
    Vielen Dank nochmal für deine Hilfe! Mit dem Thema "Multilanguage" kennst du dich nicht zufällig aus?!



  • Schön, dass es doch noch geklappt hat. 🙂

    Kopierst du die Arrays denn noch? Oder geht die Zeigerübergabe jetzt auch?

    Mit Multilanguage habe ich mich vor über 2 Jahren mal beschäftigt, ein bisserl weiss ich also. Eine Schritt für Schritt Anleitung kann ich dir aber leider nicht geben. Ich weiss nur noch, dass das damals über Resourcendlls gelöst wurde. Den Teil hat aber leider jemand anderes programmiert.



  • Das mit der Zeigerübergabe hab ich leider nicht hinbekommen, aber ich erstell die Arrays jetzt ja über new, kopiere dann nur die tatsächlich enthaltenen Elemente und geb den Speicher des "alten" Arrays dann wieder frei, dadurch geht es auch mit kopieren denk ich. Ich hab in der FAQ einen Beitrag zu Multilanguage gefunden, aber leider kapier ich das mit den DLL's nicht. Ich muß eine neue DLL erstellen und dort dann irgendwie die Dialoge aus meinem Hauptprog laden, aber wie? Und dann in der DLL einen Stringtable für die entsprechende Sprache anlegen, aber wie sag ich dann meinem Hauptprog welche Stringtable und welche Dialoge er aus der DLL laden soll 😕 😕



  • Schade, du scheinst bei der Sache mit der Mehrsprachigkeit wirklich von Anfang an Hilfe zu brauchen, das kann ich nicht.

    Poste es mal als neuen Thread, damit sich das Thema ändert und andere das lesen.

    Viel Erfolg noch 🙂



  • hatte ich schonmal, leider keine Antwort erhalten 😞
    Trotzdem nochmal Dankeschön, schönen Tag noch!
    Grüße Nico


Anmelden zum Antworten