Autor |
Beitrag |
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: Di 22.08.17 10:30
hallo,
die malloc Funktion ist eine tolle Funktion
Zu meinem problem, ich habe mehrere Beispiel gefunden, aber so richtig klar ist es mir nicht.
Mit malloc resaviert man Speicher und free gibt man ihn wieder frei. Aber ich habe nicht Beispiel gesehen wie, das passiert, wenn man nicht malloc/free verwendet. Moderiert von Th69: Topic aus Andere .NET-Sprachen verschoben am Di 22.08.2017 um 13:12
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 22.08.17 12:01
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: tomycat
|
|
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: Di 22.08.17 12:13
sorry, es handelt sich um die Sprache C. Richtung php Erweiterung.
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 22.08.17 12:36
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: tomycat
|
|
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: Mi 23.08.17 11:21
Es ist alles richtig, was du geschrieben hast
Ich stelle jetzt meine Frage mal anderst.
Laut Buch steht drin, man muss bei Motoradfahren einen Helm tragen, sonsten bekommet man ärger mit der Polizei. Dann gibt es blaue grüne und rote Motoradhelme...
Alles recht und schön. Meine Frage ist: Wann genau ist der Helm wichtig? Es kommt zum Unfall, was passiert dann alles, was könnte passieren?
|
|
Ralf Jansen
Beiträge: 4702
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mi 23.08.17 12:36
Zitat: | Es kommt zum Unfall, was passiert dann alles, was könnte passieren? |
Wenn du Methoden zum Speicher allozieren falsch benutzt komt es zu Speicher Problemen Also primär Speicherlecks bis dein Speicher aus ist und dein Programm abschmiert.
Du scheinst eine spezielle Antwort zu wünschen aber das geht bei einer so allgemeinen Frage eher nicht.
Für diesen Beitrag haben gedankt: tomycat
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 23.08.17 12:46
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: tomycat
|
|
Ralf Jansen
Beiträge: 4702
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mi 23.08.17 14:44
Zitat: | meine ausstehende Parkplatz-Metapher ruiniert. |
Mich würde die Story interessieren.
Für diesen Beitrag haben gedankt: tomycat
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 23.08.17 14:56
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: tomycat
|
|
hydemarie
Beiträge: 480
Erhaltene Danke: 51
|
Verfasst: Mi 23.08.17 18:09
Frühlingsrolle hat folgendes geschrieben : | malloc() und free() haben in der Sprache C ihre Berechtigung. Mit C++ kam das new hinzu, was genauso viel bewirkt wie malloc(). |
Das ist natürlich Unsinn nicht ganz richtig, denn new alloziiert keinen definierten Speicher, sondern erzeugt eine neue Instanz einer Klasse (inkl. Konstruktoraufruf, sofern vorhanden). malloc() schiebt erst mal einen bestimmten Speicherbereich frei, den du dann mit irgendwas - nicht zwangsläufig mit einer Klasseninstanz, sondern z.B. auch mit einem char* - vollschreiben kannst. Das geht auch in C++ noch.
Für diesen Beitrag haben gedankt: tomycat
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 23.08.17 19:08
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: tomycat
|
|
Th69
Beiträge: 4765
Erhaltene Danke: 1052
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mi 23.08.17 19:38
Sorry Frühlingsrolle, aber dein Code ist falsch (UB).
Für diesen Beitrag haben gedankt: tomycat
|
|
hydemarie
Beiträge: 480
Erhaltene Danke: 51
|
Verfasst: Mi 23.08.17 19:41
Und zu umständlich. Wenn sizeof(char) jemals nicht 1 sein sollte, ist dein Compiler mit absoluter Sicherheit kaputt.
Für diesen Beitrag haben gedankt: tomycat
|
|
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: Do 24.08.17 07:41
ok danke Jungs,
kann man jemand ein Beispiel machen, wo man sagt HIER braucht man malloc und so stützt das Prog ab.
|
|
Th69
Beiträge: 4765
Erhaltene Danke: 1052
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 24.08.17 09:26
Für diesen Beitrag haben gedankt: tomycat
|
|
hydemarie
Beiträge: 480
Erhaltene Danke: 51
|
Verfasst: Do 24.08.17 09:27
Du brauchst malloc/ calloc beziehungsweise realloc zum Beispiel für C und damit auch die Interaktion mit C.
Konkreter Anwendungsfall: du möchtest eine Textdatei zeilenweise in eine Variable speichern. Da C keine std::strings und keine Vektoren kennt, bräuchtest du dafür zum Beispiel einen char**-Pointer. Die einzelnen Strings brauchen aber jedes Mal eine andere Anzahl an Byte, sie sind ja selten identisch.
C++-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| while (textfile) { char* next_line = strchr(textfile, '\n'); int linelength = next_line ? (next_line - textfile) : strlen(textfile); char* temp_str = (char *)malloc(linelength + 1);
if (temp_str) { memcpy(temp_str, textfile, linelength); temp_str[linelength] = '\0'; free(temp_str); }
textfile = next_line ? (next_line + 1) : NULL; } |
Absturz (Beispiel): Räume einen Speicherbereich frei, der dir nicht gehört.
C++-Quelltext 1: 2:
| int quux = 42; free(quux); |
Für diesen Beitrag haben gedankt: tomycat
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 24.08.17 09:48
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: tomycat
|
|
hydemarie
Beiträge: 480
Erhaltene Danke: 51
|
Verfasst: Do 24.08.17 09:53
Es ergibt nicht viel Sinn, hier einen Pointer zu verwenden. Aber warum sollte der Code falsch sein?
Nachtrag: Warum printf?
Für diesen Beitrag haben gedankt: tomycat
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 24.08.17 10:07
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: tomycat
|
|
hydemarie
Beiträge: 480
Erhaltene Danke: 51
|
Verfasst: Do 24.08.17 10:12
Nö, ich meinte das Beispiel aus Wikibooks.
Für diesen Beitrag haben gedankt: tomycat
|
|