Uebung - moegliche Erweiterung von Klasse SerialEvent - dynamische Arraygroesse
Dependencies: mbed
main.cpp
- Committer:
- Powers
- Date:
- 2019-01-31
- Revision:
- 0:cd7dcdb46501
File content as of revision 0:cd7dcdb46501:
#include "mbed.h" // Uebung zur möglichen Erweiterung der Klasse SerialEvent // um die Arraygrößen für die Strings dynamisch zu bestimmen void dynamic_array(int arreaylaenge); int main() { dynamic_array(99); return 0; } void dynamic_array(int arraylaenge) { //Ueberpruefung wieviel speicher ein Char braucht um die groeße des zu reservierenden Speichers //mit der in C integrierten Funktion "sizeof()" kann die Groesse in Bytes von Datentypen und Daten //ermittelt werden printf("Size of a \"char\": %i Byte \n\n", sizeof(char)); //malloc gibt einen pointer zurueck der auf den reservierten Speicherbereich zeigt //wichtig beim erstellen des char arrays immer lange + 1 fuer das 0-Byte //einen char Pointer erstellen der dann auf das Array im Speicher zeigen soll //wird an die malloc Funktion gebunden, da diese einen Pointer zurueck gibt char *str_pointer; printf("Adresse vom str_pointer Pointer: %i - 0x%x \n", &str_pointer, &str_pointer); //Laenge ist die uebergebene arreylaenge + 1 char fuer das 0 Byte '\0' str_pointer = (char*)malloc(arraylaenge * sizeof(char) + sizeof(char)); printf("Adresse vom neuen str_pointer Array: %i - 0x%x \n\n", str_pointer, str_pointer); printf("Groesse des Datensatzes -> %i Byte \n\n", arraylaenge+1); //str_pointer = (char*)malloc(8+1); // auch moeglich aber besser wie oben da auf einem anderen // Betriebssystem der Speicher für Char koennte anders sein kann // Im Speicher werden 9Byte vom Typ char reserviert // 0 Byte muss selbst gesetzt werden '\0' // 1 char Element brauch 1 Byte her werden 8 Byte fuer die Daten // und 1 Byte für das speichern des 0 Bytes str_pointer[0] = '0'; // wenn man etwas in einen Bereich schreibt der nicht reserviert // ist zB str_pointer[9] stürzt das Programm ab, da man // in einen Bereich des Speichers schreibt der auserhalb // des Arrays ist [Zugriff auf Fremddaten meglich :) :) ] for (int x = 0; x < arraylaenge; x++) { str_pointer[x] = 'e'; // Fuellen des Arrays mit e's } str_pointer[arraylaenge] = '\0'; // 0-Byte setzen zum beenden des Strings - notwendig da Array printf("Inhalt des Arrays nach dem Befuellen --> \n%s \n\n", str_pointer); // Testabfrage eines Feldes -> valid printf("Ausgabe vor dem Freigeben des Speichers - str_pointer[3]: %c \n", str_pointer[3]); // Speicher wieder freigeben - muss gemacht werden sonst -> Memory Leak free(str_pointer); // Testabfrage eines Feldes -> invalid - da der speicher freigegeben wurde und man in einen Bereich kommt // der nicht mehr vom Programm benutzt wird printf("Ausgabe nach dem Freigeben des Speichers - str_pointer[3]: %c \n", str_pointer[3]); }