Anfängerfrage - Erzeugen zur Laufzeit

Ich habe ein Verständnisproblem. Warum gibt mir der Compiler Errors aus.

typedef int int_array[10];

void setup()
{
int* a = new int;
int* b = new int[10];
int* c = new int_array;

delete a;
delete[] b;
delete[] c;
}


void loop()
{

}

Danke im Voraus.

Da sind Unterschiede im Kompiler Processing / Arduino

Das rührt vom Stamm: Arduino -> c, C#
Processing -> Java

Erstmal danke für die Antwort. Habe mir die Seite angeschaut, aber kein Beispiel für dynamisch Variablen gefunden.

Für eine Richtigstellung des obigen Codes währe ich dankbar.

Berechnungen gehören nicht in die 'void setup()' - Meiner Meinung nach.

Gollywog:
Berechnungen gehören nicht in die 'void setup()' - Meiner Meinung nach.

Hat zwar nichts mit der eigentlichen Frage des Threaderstellers zu tun, aber ich frage trotzdem:

Warum nicht? Meiner Meinung nach gehört da alles rein, was nur einmal nach dem Programmstart ausgeführt werden soll. Auch wenn es setup() heißt.
Wenn du es nach loop() packst, wird die new/delete-Orgie immer wieder und wieder ausgeführt oder du musst zusätzlichen Code drum packen, damit es nur einmal ausgeführt wird. - Meiner Meinung nach :wink:

Wolfgang

Warum nicht? Meiner Meinung nach gehört da alles rein, was nur einmal nach dem Programmstart ausgeführt werden soll. Auch wenn es setup() heißt.
Wenn du es nach loop() packst, wird die new/delete-Orgie immer wieder und wieder ausgeführt oder du musst zusätzlichen Code drum packen, damit es nur einmal ausgeführt wird. - Meiner Meinung nach

Wolfgang hat voll Recht !

Und wie gehört es richtig?

zurück zum Thema:
Es gibt in c keine dynamischen Variablen. Alles muss vorher deklariert werden.

malloc?

Malloc gibts, aber dass ist nicht für Mikrocontroller geeignet.

Was passiert, wenn malloc verwendet wird, ohne zu wissen wie viel Speicher vorhanden ist ?
Was passiert, wenn der Speicher überläuft?
Welche Funktionen müssen geschrieben werden um diese Fehler abzufangen ?
Lohnt sich dann der Mehraufwand noch ?

Dynamische Speicherverwaltung ist für PC`s gut, wo man Unmengen an Speicher hat, aber nicht für diesen Kontroller.

Auch keine dynamischen Arrays?

Also nicht die Namen, nur die Länge.

char *str = "Das hier ist eine beliebig lange Zeichenkette";

Aber es ist besser wenn du mit festgelegten Längen arbeitest, da ansonsten wieder folgende Fragen auftreten.

Habe ich einen Speicherüberlauf?
Wie kann ich das verhindern ....

Wenn du die zu 110% sicher bist, dass *str nicht länger als 20 Zeichen wird, dann kann man es auch definieren.

Erstmal vielen Dank!

Letzte Frage - wenn ich dynamische Anzahl von Telegrams haben möchte

typedef struct 
{
  byte bTest01;
  byte bTest02;
} Telegram;

typedef struct 
{
  Telegram Telegrams[5];
} allTelegrams;

Statt Telegram Telegrams[5] - ist es dann

Telegram* Telegrams

oder?

Danke

Könnte klappen, funktioniert das denn ?
Ich hab es so noch nie getestet :wink: