ArrayList für drei verschiedene Typen
-
Hallo zusammen,
also an einem Beispiel wäre ich wirklich interessiert. By the way: Wo ist hier die PM Funktion??? Aber was mich wundert: Wo soll die Fragmentierung und der BufferOverflow in meiner Implementierung herkommen? Ich sehe es nicht. Das PDF ist für mich nicht richtig einsetzbar, da ich O(n) zugunsten von Speicherersparniss gerne akzeptiere. Wie gesagt, Speicher ist bei mir extrem knapp, warten kann ich zu not

Gruß
Uwe
-
uwerothfeld schrieb:
Zugriffe direkt auf Datenstrukturen sind daher für mich etwas böses.
diesen aberglauben solltest du dir schnell abgewöhnen, wenn du's mit solchen minimalsystemen zu tun hast.

-
hi,
ja ist schon klar
aber man kann sich doch zumindest das leben einfacher machen. ich finde addElem() ist besser lesbar statt list->content[list->next++]= ... oder ähnliches.Softwarequalität durch Design sozusagen

Gruß
-
uwerothfeld schrieb:
also an einem Beispiel wäre ich wirklich interessiert. By the way: Wo ist hier die PM Funktion???
Geh mal auf http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-13057.html da ist ein "Email senden" link.
uwerothfeld schrieb:
Aber was mich wundert: Wo soll die Fragmentierung und der BufferOverflow in meiner Implementierung herkommen? Ich sehe es nicht.
Fragmentierung und BufferOverflows kommen im Verfahren vom besserwisser vor, wenn man nur ein Array anlegt und ein Zeiger darauf hat, um an die Daten zu kommen. Das hat erstmal nichts mit deinem Code zu tun.
-
hallo und noch ne frage,
wie soll mir eigentlich der verzicht auf addElem, getElem ... Codesize sparen? Ich meine wenn ich auf das Array zugreife muß ich eh jedesmal schauen, ob noch Platz ist, mir merken wieviel Elemente ich schon gespeichert habe, was das letzte Element ist ... . Ich sehe da keinen Vorteil, ob ich nun den Code dafür einmal in eine eigene Funktion kapsele oder es jedesmal vor Ort mache. Kommentare?

Uwe
-
hi,
supertux schrieb:
Fragmentierung und BufferOverflows kommen im Verfahren vom besserwisser vor, wenn man nur ein Array anlegt und ein Zeiger darauf hat, um an die Daten zu kommen. Das hat erstmal nichts mit deinem Code zu tun.
Ja das leuchtet dann ein. Wollte dennoch mal fragen, man lernt ja nie aus

-
ok, ich geb auf. ich habe versucht, die einfachste methode anzugeben. aber im endeffekt muss doch uwerothfeld entscheiden, wie er es programmiern will.
wieso meine funktion buffer overflows hat und den speicher fragmentiert, weiß ich nicht. vielleicht erklärt mir das jemand?
@uwerothfeld
viel glück noch und schreib es so, wie du es für richtig hälst.
-
besserwisser schrieb:
wieso meine funktion buffer overflows hat und den speicher fragmentiert, weiß ich nicht. vielleicht erklärt mir das jemand?
das hab' ich auch nicht verstanden. zumal die elemente ja eine feste länge haben und man immer genau weiss, wieviel noch in den buffer passt. auch bei variablen elementlängen ist das ermitteln des noch freien speicherplatzes keine hexerei. deine methode ist simpel und genau das richtige für so'n minimalsystem wie's der OP hat. allerdings würde ich das array als ringbuffer ansprechen, so dass schon mal was rausgeholt werden kann, während daten eintrudeln.

-
besserwisser schrieb:
wieso meine funktion buffer overflows hat und den speicher fragmentiert, weiß ich nicht. vielleicht erklärt mir das jemand?
ok, ich wollte nicht sagen, dass deine Funktion welche hat, sondern wenn man nur ein Array legt und ein Pointer drauf kann es halt dazu führen
struct gen_data_type memory[MAX_ELEMS]; struct gen_data_type *list = &memory[0]; ... list->data = ...; list++; list->data = ...; list++; ... list++; /* Gefahr über die Array Grenze zu gehen */Aber ich muss jetzt zugeben, dass beim 2. Durchlesen des ganzen Threads die Sache nicht mehr so erscheint, wie ich es am Anfang interpretiert habe. Ich hatte schon mal eine (wie auf der anderen Seite) beschriebene Liste gehabt und wenn man viele Listenoperationen insert,insert,remove,insert,usw. hat, dann hätte man entweder bei jedem remove alles nach dem gelöschten Element im Array verschieben müssen oder eine Lücke lassen (darum verwalte ich da 2 Zeiger für den freien und den belegten Speicher). Sorry, jetzt merke ich aber, dass dieser Ansatz nicht so ganz mit deinem übereinstimmt.
-
supertux schrieb:
list++; /* Gefahr über die Array Grenze zu gehen */nicht wirklich. du kennst ja MAX_ELEMS und die aktuelle zeigerposition.

-
-fricky- schrieb:
supertux schrieb:
list++; /* Gefahr über die Array Grenze zu gehen */nicht wirklich. du kennst ja MAX_ELEMS und die aktuelle zeigerposition.

natürlich kennst du die, aber der nicht aufmerksame Programmierer könnte das vergessen. Ich geb zu, hab vorhin was falsch verstanden, weil ich nur den Thread schnell überflogen bin.
-
supertux schrieb:
Ich geb zu, hab vorhin was falsch verstanden, weil ich nur den Thread schnell überflogen bin.
halb so schlimm. ich hab' auch nicht verstanden, wieso er einträge mittendrin löschen muss und bestimmt auch unpassende tipps gegeben.

-
-fricky- schrieb:
supertux schrieb:
Ich geb zu, hab vorhin was falsch verstanden, weil ich nur den Thread schnell überflogen bin.
halb so schlimm. ich hab' auch nicht verstanden, wieso er einträge mittendrin löschen muss und bestimmt auch unpassende tipps gegeben.

ich ging eher von einem generellen Einsatz einer Liste, da hat man nicht nur Einfüge- sondern auch Löschoperationen, deswegen habe ich das erwähnt. Aber vielleicht war es dann zu viel des Guten

-
Hallo zusammen,
ich möchte nochmal Euch allen Danken für die Hilfe, die ich hier bekommen habe. Ich habe meine Lösung noch an einigen Punkten ändern könen, hoffentllich zum guten

besserwisser schrieb:
ok, ich geb auf. ich habe versucht, die einfachste methode anzugeben. aber im endeffekt muss doch uwerothfeld entscheiden, wie er es programmiern will.
[...]
@uwerothfeld
viel glück noch und schreib es so, wie du es für richtig hälst.Ich wollte durch die Disskussion keinen vor den Kopf stoßen, sollte dies dennoch passiert sein, entschuldigt dies. Ich habe festgestellt, dass die zusätzlichen Codezeilen für meine addElem ... Funktionen die gleiche Codegröße erzeugen, bei dem verwendeten Compiler, wie die von besserwisser vorgeschlagene Version. Auch ein interessanter Aspekt.
Nun jedoch nocheinmal zurück zu einer Teilfrage meines Problems, welches glaube ich etwas untergegangen ist :). Ich definiere ja die Länge des Arrays über MAXLENGTH. Gibt es hier nen Möglichkeit ala OO, das ich beim definieren der Struktur sage:
List list(10);wobei 10 für die MAXLENGTH des spezifischen Arrays steht? In jede Struktur ne eigene MAXLENGTH einzupacken fällt mir nur ein, aber macht man soewtas?
Vielen Dank.
Uwe