Frage zu einem Array einer Klasse



  • Hallo!

    Ich habe folgendes Problem. Ich schreibe grade ein Programm, das zunächst mal eine csv-Datei auslesen soll. Dazu habe ich mir eine Klasse erstellt, in die jeweils ein Datensatz aus einer csv-Datei paßt. Diese Klasse enthält:
    -char[300]
    -char[11]
    -char[34]
    -char[50]
    -int[96]

    und zusätzlich die üblichen Funktionen zum lesen und schreiben der Werte. Nun mein Problem:

    Das Auslesen der Datei funtioniert soweit, denke mein Code ist nicht super, aber er tut es. Ich möchte die Datensätze aus einer Datei nun in einem Array der von mir erstellten Klasse speichern. Wenn ich das Array größer als 1200 mache bekomme ich allerdings einen Compilerfehler und nichts geht mehr. Ist das eine Beschränkung vom Compiler und kann ich das irgendwie umgehen? Ich müßte die Werte alle im Speicher behalten, damit ich mit ihnen arbeiten kann. Unter anderem sollen sie sortiert werden etc.. Danach möchte ich sie in eine andere Datei wieder abspeichern. Hat jemand dazu eine Idee?

    besten Dank schonmal!



  • dercmdr schrieb:

    ...Wenn ich das Array größer als 1200 mache bekomme ich allerdings einen Compilerfehler...

    welchen?



  • Hallo

    wenn du ein klassisches C-Array verwendest, solltest du statt dessen zu dem dynamischen Array vector wechseln. Das unterliegt nicht den Größenbeschränkungen auf dem Stack.

    bis bald
    akari


  • Mod

    Ich vermute mal, dass du dieses array als lokale variable anlegst. nur mit den daten, die du ooben angibst ist aber jede instanz wenigstens 779 bytes gross. 779*1200 ist fast 1MB und da kann es dann durchaus passieren, dass der compiler aussteigt, oder das program beim starten abstürzt. Die allgemeine lösung ist hier, wie bereits gesagt, die verwendung von containern. vector oder deque bieten sich an. statt der char arrays könntest du auch strings verwenden, das veringert den speicherbedarf der instanz (und vermutlich auch den gesamtspeicherbedarf) und ist flexibler.



  • Hallo!

    Ich lege vier dieser Arrays in meinem main-Teil an, da ich aus vier Dateien lesen und dann auf verschiedenste Arten mit den Daten hantieren muß. Diese vector Geschichte kenne ich noch nicht, werde mir das mal anschauen. Hab noch keine Ahnung wie man damit umgeht. Falls ich nicht damit klarkomme melde ich mich nochmal. Trotzdem leuchtet mir nicht so ganz ein, wieso es einen Absturz ab einer bestimmten Größe eines Arrays gibt. Ich dachte immer da gibt es in C keine Beschränkungen drauf. An dynamischer Speicherverwaltung habe ich bisher nur mit new gearbeitet, aber wenn ich ein array mit new anlege belegt es ja genausoviel speicher wie wenn ich es fest anlege, sofern es die gleiche Menge an Elementen hat. Deshalb glaube ich nicht, daß das weiterhelfen würde. Ich müßte eigentlich auf 4*20000 bis 4*30000 Datensätze, wenn ich alles auf einmal einlesen möchte. Von der reinen Speichermenge sollte dass doch kein Problem sein für einen Rechner. Vielleicht könnte mich ja mal jemand aufklären.


  • Mod

    wenn du das array nicht auf dem free store mittels new anlegst, sondern als automatisch auf dem stack, dann sind deine möglichkeiten durch die grösse des stacks begrenzt. es gibt zwar möglichkeiten, diese grösse beim compilieren bzw. linken anzupassen, trotzdem ist diese wahl dann in jedem falle statisch.

    mit vector kannst du im grunde genauso wie mit einem array umgehen, nur must du dich nicht um die speicherverwaltung kümmern.


Anmelden zum Antworten