@Serenifly
Also wäre das dann so richtig ?!
CMD_Sequence = (CMD_Record*) calloc (NumSeq * (sizeof (CMD_Record)));
Das mit den Vektoren check ich (noch) nicht ...
@michael_x
Wenn ich von vornherein wüsste, wieviele Sequenzen für eine Figur kommen, würde ich mir da sicher keinen Kopf machen.
Das soll ja eben der Clou an dieser Steuerung sein - in Kombination mit einem Flag "Endlos" dann auch bis zum Sankt Nimmerleinstag.
Natürlich kann ich auch hingehen und rechen: Was brauch ich für Variablen ? Wie groß könnte der max. Bedarf für den Stack sein, lasse noch ein paar hundert Byte Luft und greife mir dann den Rest (sagen wir einfach mal 6 KB) und hätte dann Platz für max. 1000 Records äh Structs.
Sicherlich funktionell, aber da sträubt sich in mir irgendwie alles.
... aber wehe du machst danach noch einen Funktionsaufruf.
Der Stack ist nicht so rücksichtsvoll, sondern zerschreibt dir deinen Speicher. Oder durch Schreiben in den dynamischen Speicher machst du dir den Stack kaputt.
Natürlich kommt mit Sicherheit danach nicht nur ein Funktionsaufruf ! Wie darf ich "nicht so rücksichtsvoll" verstehen ? Schreibt ein Arduino einfach so planlos in den Speicher und guckt nicht vorher irgendwo nach, ob der schon reserviert ist ?
Das wäre ja fatal, desaströs !
@Jomelo
Ja, eben sind 2-8KB ratzfatz belegt. Vor allem, wenn man es vom PC her so gewohnt, sich mal eben schnell nen Paar MB zu holen ....
Es könnte ja auch durchaus sein, das wenn man noch andere LIBs mit eingebunden hat und diese sich auch noch die einen oder anderen Bytes in unbekannter Menge holen (wollen) sehr schnell ein Prob mit zuvor benannter Rechenweise bekommt und der kleine Kalkulator dann out of memory ist ...
Mich beschleicht da eher so ein Gefühl, dass diejenigen, welche mit erhobenem Zeigefinger vor dynamischer Speicherverwaltung warnen, eher keinen Plan davon haben, wie man es richtig und sicher macht.
Es sei denn, der Arduino macht mit seiner vermeintlich seltsamen Speicherverwaltung (das sage ich nur einfach mal so) einem tatsächlich einen trich durch die Rechnung macht.
PS: Wer bei zu klein dimensioniertem Speicher nicht in der Lage ist, mittels Logik, Debuggern oder im worst-case jeden Schritt protokollieren lassen, so einen Fehler nicht in adäquater Zeit findet, der sollte sich vielleicht mal nach nem anderen Job umsehen. Natürlich bib es fiese Käfer, die sich gut tarnen & verstecken - aber finden tut man die mit Verstand und Logik immer !