Ergebnis 1 bis 11 von 11

Thema: "bad allocation"-Fehler beim Laden von Saves

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.03.04
    Beiträge
    22

    "bad allocation"-Fehler beim Laden von Saves

    Hallo!

    Ich bekomme regelmäßig Abstürze, wenn ich das zweite Mal innerhalb eines Szenarios (modifizierte riesige 34_Civ Karte von Mef) einen Spielstand laden möchte. Allererstes Laden geht noch, dann kann ich - bei Bedarf - noch einmal innerhalb des laufenden Spiels laden. Versuche ich, danach erneut einen Spielstand zu laden (das kann auch einige Runden später sein), schmiert Civ 4 während der Karteninitialisierung mit folgender Fehlermeldung ab:

    "Memory allocation failure - exiting program.
    Reason: bad allocation"

    Nach dem Absturz kann der Spielstand erneut ohne Beeinträchtigung geladen, weitergespielt, gespeichert werden, ein weiteres Mal geladen werden - danach das gleiche Problem.

    Ich nehme an, dass irgendwo etwas falsch oder unsauber vom mir platziert wurde, denn das Problem trat erst nach meiner modifizierung der Originalkarte von Mef auf. Weiß jemand, wo der Fehler liegt oder zu suchen ist?

    Programm: Civ 4 mit BtS, patch 3.13

  2. #2
    Computerdödel Avatar von Blair-
    Registriert seit
    20.04.06
    Ort
    Graz, Herzogtum Steiermark
    Beiträge
    759
    Zitat Zitat von buad Beitrag anzeigen
    Ich nehme an, dass irgendwo etwas falsch oder unsauber vom mir platziert wurde, denn das Problem trat erst nach meiner modifizierung der Originalkarte von Mef auf. Weiß jemand, wo der Fehler liegt oder zu suchen ist?
    nein, es liegt an der teilweise sehr speicherhungrigen programmierung. irgendwo ist ein speicherleck versteckt. da du übergroße karten mit mehr civs spielst, ist der speicherbedarf enorm hoch. ich selbst spiele auch 1.5x so große karten wie das normale "riesig" auf marathon. im lategame bekommen die saves dann 2.5MB größe und mehr als 1.5GB RAM werden von civ verbraucht. wenn du da noch laden versuchst, stirbt er dir mit freude weg.

    ich habe keine lust im SDK nach dem fehler zu suchen, da der überhauptnicht dokumentiert ist, und man da ein schwammerl wird, bis man sowas findet ...

    also besser gleich ganz beenden und frisch laden, das ist wesentlich effizienter.
    Ferdinand II. (* 9. Juli 1578 in Graz; † 15. Februar 1637 in Wien) war ein Fürst aus dem Hause Habsburg, von 1617 – mit einer Unterbrechung 1619/1620 – König von Böhmen sowie von 1618 König von Ungarn und von 1619 bis 1637 Kaiser des Heiligen Römischen Reiches.

    Herzogtum Steiermark

  3. #3
    Registrierter Benutzer
    Registriert seit
    11.03.04
    Beiträge
    22
    Danke für die Info - obwohl sie *im Prinzip* natürlich unbefriedigend ist. Bei 2 GB RAM im Rechner sollte ein Spiel schon bei Speicherständen mit 2,5 MB umgehen können - meine Güte, so manches Rollenspiel hat Speicherstände von 30 MB, und da bereitet das Laden von Spielständen überhaupt kein Problem!
    Irgendwie wirkt da Civ4, was die Technik betrifft, doch arg angestaubt und eng limiiert - schade drum. So gut die KOnzepte in Civ 4 daher auch sein mögen: ein mMn im Vergleich zu Civ 3 eher rückschrittlicher "Editor" und stark limitierende technische Faktoren werden dem eigentlichen Spiel alles andere als gerecht...

    Wahrscheinlich würde auch die Suche helfen, aber da ich ohnehin schon was geschrieben habe:
    Da es sich bei dem "34 Civ"-Spiel um eine Modifikation handelt: wie kann man es einfach bewirken, dass die Modifikation sofort bei SPielstart lädt? Immerhin werden dadurch mehrere Sekunden gespart...

  4. #4
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Dass Problem muss nicht unbedingt an Civ liegen.
    Wenn nämlich der Speicherplatz mit C++ allociert wird (was der Horror ist), dann dürfte dem Programm nach einiger Zeit einfach die Integer-Zahlen ausgehen. Ist nur ne Vermutung, aber wenn du irgendwo Vista64 hast, kannst du mal ausprobieren, ob's da länger läuft.
    Zum Download bereit: Civ4-Mod "Mars, jetzt!"


    "Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )

    "Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)


  5. #5
    Computerdödel Avatar von Blair-
    Registriert seit
    20.04.06
    Ort
    Graz, Herzogtum Steiermark
    Beiträge
    759
    Zitat Zitat von buad Beitrag anzeigen
    Danke für die Info - obwohl sie *im Prinzip* natürlich unbefriedigend ist. Bei 2 GB RAM im Rechner sollte ein Spiel schon bei Speicherständen mit 2,5 MB umgehen können - meine Güte, so manches Rollenspiel hat Speicherstände von 30 MB, und da bereitet das Laden von Spielständen überhaupt kein Problem!
    die dateigröße hat damit überhauptnichts zu tun. das kommt auf die daten selbst an, die in die datei geschrieben werden und mit welchem algorithmus das spiel dann beim laden wieder aufgebaut wird. ich hab grad eine partie im hintergrund offen - 1543MB RAM zieht sich civ gerade.

    wenn ich jetzt lade, dann wird nach und nach speicher von der jetzigen partie freigegeben und von der zu ladenden datei neu in den speicher geschrieben. ist irgendwo ein speicherleck (also wird nicht freigegeben und kann nicht neu allokiert werden obwohl "nichts" drinsteht), dann kommt man mit sicherheit an die grenze der 2GB, die windows unter 32bit einem prozess zuweisen kann. civ selbst stirbt da halt schon etwas vorher.


    Irgendwie wirkt da Civ4, was die Technik betrifft, doch arg angestaubt und eng limiiert - schade drum. So gut die KOnzepte in Civ 4 daher auch sein mögen: ein mMn im Vergleich zu Civ 3 eher rückschrittlicher "Editor" und stark limitierende technische Faktoren werden dem eigentlichen Spiel alles andere als gerecht...
    ja, der editor ist nicht gerade das gelbe vom ei und die 3d engine auch nicht. dennoch fallen bei einem spiel dieser komplexität einige dinge an, die auch nicht leicht zu meistern sind. ich finde im SDK immer wieder kleinigkeiten, die man hätte besser machen können, unabhängig davon, ob sie civ-typisch sind oder nicht.

    Wahrscheinlich würde auch die Suche helfen, aber da ich ohnehin schon was geschrieben habe:
    Da es sich bei dem "34 Civ"-Spiel um eine Modifikation handelt: wie kann man es einfach bewirken, dass die Modifikation sofort bei SPielstart lädt? Immerhin werden dadurch mehrere Sekunden gespart...
    du suchst in deiner CivilizationIV.ini (achtung: spiel beachten (WL, BTS,..) den eintrag "Mod".
    dort schreibst dann hin "Mod = Mods\DeinModOrdnerName" (ohne "" und unbedingt mit backslash)
    danach läd er den mod beim start automatisch

    Zitat Zitat von The_J Beitrag anzeigen
    Wenn nämlich der Speicherplatz mit C++ allociert wird (was der Horror ist),
    sprichst du da jetzt aus erfahrung bzw was genau findest du dabei als "horror"?
    bin zwar kein fan von cpp, aber die unterstellung ist schon fast gemein
    Ferdinand II. (* 9. Juli 1578 in Graz; † 15. Februar 1637 in Wien) war ein Fürst aus dem Hause Habsburg, von 1617 – mit einer Unterbrechung 1619/1620 – König von Böhmen sowie von 1618 König von Ungarn und von 1619 bis 1637 Kaiser des Heiligen Römischen Reiches.

    Herzogtum Steiermark

  6. #6
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Zitat Zitat von Blair- Beitrag anzeigen
    sprichst du da jetzt aus erfahrung bzw was genau findest du dabei als "horror"?
    bin zwar kein fan von cpp, aber die unterstellung ist schon fast gemein
    Ich will's mal so sagen:
    Ich will nen String variabler Länge einlesen, und sag' mir so: "Guckste mal, was die Hilfe her gibt." Und die Hilfe liefert Quellcode, den ich nicht verstehe, und der länger ist als mein Programm. Das geht in andern Sprachen wesentlich einfacher.
    Zum Download bereit: Civ4-Mod "Mars, jetzt!"


    "Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )

    "Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)


  7. #7
    Computerdödel Avatar von Blair-
    Registriert seit
    20.04.06
    Ort
    Graz, Herzogtum Steiermark
    Beiträge
    759
    Zitat Zitat von The_J Beitrag anzeigen
    Ich will's mal so sagen:
    Ich will nen String variabler Länge einlesen, und sag' mir so: "Guckste mal, was die Hilfe her gibt." Und die Hilfe liefert Quellcode, den ich nicht verstehe, und der länger ist als mein Programm. Das geht in andern Sprachen wesentlich einfacher.
    daß C keinen eigenen "echten" string datentyp hat hat aber mit speicherallokierung wenig zu tun
    ein punkt, wo C rückständig ist, wär zB daß man sich immer selber um malloc und free (bzw new/delete in c++) kümmern muß, während das zB in java und cs die garbage collection erledigt. durch nützen von boost::shared_ptr läßt sich auch dies schön bereinigen.

    weiters OT: was ist an strings einlesen in C++ so schwer? guck dir mal stringstream an.
    wieso tust du dir das überhaupt an, wenn du schon den hilfsquellcode nicht verstehst?
    Ferdinand II. (* 9. Juli 1578 in Graz; † 15. Februar 1637 in Wien) war ein Fürst aus dem Hause Habsburg, von 1617 – mit einer Unterbrechung 1619/1620 – König von Böhmen sowie von 1618 König von Ungarn und von 1619 bis 1637 Kaiser des Heiligen Römischen Reiches.

    Herzogtum Steiermark

  8. #8
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    naja, weil der Prof im 1. Semester dummerweise mit c++ angefangen hat und nicht mit Java...was bei uns auch nicht mehr dran kommt .
    Strings hab' ich eigentlich immer mit ner Schleife eingelesen, aber ich hab' ja auch keine Ahnung .
    Und das ein String ein array of char ist, ist mir immerhin klar (wenigstens etwas).
    Zum Download bereit: Civ4-Mod "Mars, jetzt!"


    "Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )

    "Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)


  9. #9
    Computerdödel Avatar von Blair-
    Registriert seit
    20.04.06
    Ort
    Graz, Herzogtum Steiermark
    Beiträge
    759
    Zitat Zitat von The_J Beitrag anzeigen
    naja, weil der Prof im 1. Semester dummerweise mit c++ angefangen hat und nicht mit Java...was bei uns auch nicht mehr dran kommt .
    Strings hab' ich eigentlich immer mit ner Schleife eingelesen, aber ich hab' ja auch keine Ahnung .
    Und das ein String ein array of char ist, ist mir immerhin klar (wenigstens etwas).
    ist auch gut so, nicht gleich mit java anzufangen, ohne ahnung von softwarearchitektur zu haben. wenn schon - denn schon.

    um anfängern programmieren beizubringen ist C (also nur C, nicht cpp) die erste wahl. in erster linie gehts ja darum, eine programmierstruktur aufzubauen und mit datentypen vertraut zu werden.
    gerade das wie, also "in schleifen einlesen" sollst du ja so lernen.

    1. semester - uni? kenn ich keine, die mit java anfängt.

    java kommt frühestens am ende des 2. semesters oder gar erst im 3.
    zuerst muß erst ein vernünftiges design her und zB UML verstanden werden. sonst ist java "nur eine weitere sprache".
    Ferdinand II. (* 9. Juli 1578 in Graz; † 15. Februar 1637 in Wien) war ein Fürst aus dem Hause Habsburg, von 1617 – mit einer Unterbrechung 1619/1620 – König von Böhmen sowie von 1618 König von Ungarn und von 1619 bis 1637 Kaiser des Heiligen Römischen Reiches.

    Herzogtum Steiermark

  10. #10
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Bei uns (fh) fangen eigentlich alle (bis auf wir, da ist was schiefgelaufen) mit Java an, und teils kommt wegen opengl dann später cpp.
    Und ich hab' als Anfänger mit Delphi angefangen. Da hat ma nzwar nix von der STruktur verstanden, aber da hat cpp nun nachgeholfen.
    Und uml wird hier beim Software-engeneering auch gemacht, wird halt auf java draufgesetzt.
    Zum Download bereit: Civ4-Mod "Mars, jetzt!"


    "Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )

    "Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)


  11. #11
    Computerdödel Avatar von Blair-
    Registriert seit
    20.04.06
    Ort
    Graz, Herzogtum Steiermark
    Beiträge
    759
    Zitat Zitat von The_J Beitrag anzeigen
    Bei uns (fh) fangen eigentlich alle (bis auf wir, da ist was schiefgelaufen) mit Java an, und teils kommt wegen opengl dann später cpp.
    Und ich hab' als Anfänger mit Delphi angefangen. Da hat ma nzwar nix von der STruktur verstanden, aber da hat cpp nun nachgeholfen.
    Und uml wird hier beim Software-engeneering auch gemacht, wird halt auf java draufgesetzt.
    dann hast du wohl einen eher auf grafik ausgerichteten studiengang. mit opengl und dx haben wir nicht wirklich was am hut. in einem grafikfach wird programmieren mit opengl zwar als literatur angegeben, aber mehr als floodfill-algos und ähnliches ist bei uns (informatik und wirtschaft an der hiesigen TU) in pflichtfächern nicht vorhanden.

    meine anfänge waren mit pascal (1 jahr in der schule), danach schon an der uni SML, prolog und C - sozusagen ins kalte wasser . CPP dann erst im 2.semester, java an dessen ende (aufgabe war die cpp aufgabe in java neu zu portieren und um ein GUI zu erweitern)
    Ferdinand II. (* 9. Juli 1578 in Graz; † 15. Februar 1637 in Wien) war ein Fürst aus dem Hause Habsburg, von 1617 – mit einer Unterbrechung 1619/1620 – König von Böhmen sowie von 1618 König von Ungarn und von 1619 bis 1637 Kaiser des Heiligen Römischen Reiches.

    Herzogtum Steiermark

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •