Autor Beitrag
tomycat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: 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 user profile iconTh69: Topic aus Andere .NET-Sprachen verschoben am Di 22.08.2017 um 13:12
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 22.08.17 12:01 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: tomycat
tomycat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Di 22.08.17 12:13 
sorry, es handelt sich um die Sprache C. Richtung php Erweiterung.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 22.08.17 12:36 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: tomycat
tomycat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 :gruebel: 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



BeitragVerfasst: Mi 23.08.17 12:46 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: tomycat
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 23.08.17 14:44 
Zitat:
meine ausstehende Parkplatz-Metapher ruiniert. :crying:


Mich würde die Story interessieren.

Für diesen Beitrag haben gedankt: tomycat
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 23.08.17 14:56 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: tomycat
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Mi 23.08.17 18:09 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
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



BeitragVerfasst: Mi 23.08.17 19:08 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: tomycat
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 23.08.17 19:38 
Sorry Frühlingsrolle, aber dein Code ist falsch (UB).

Für diesen Beitrag haben gedankt: tomycat
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 24.08.17 09:26 
Lies dir am besten mal Dynamischer Speicher (bzw. der englische Artikel dazu: C dynamic memory allocation) und für C++ Speicherverwaltung / Zusammenfassung durch.

Für diesen Beitrag haben gedankt: tomycat
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: 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.

ausblenden C++-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
/* Annahme: char* textfile enthält Textdatei */
while (textfile) {
    char* next_line = strchr(textfile, '\n');
    int linelength = next_line ? (next_line - textfile) : strlen(textfile); /* berechne Zeilenlänge */
    char* temp_str = (char *)malloc(linelength + 1); /* alloziere genau so viel Speicher (plus Nullterminator)! */

    if (temp_str) {
        memcpy(temp_str, textfile, linelength);
        temp_str[linelength] = '\0';
        /* temp_str = aktuelle Zeile */
        /* mach irgendwas damit */
        free(temp_str);
    }

    textfile = next_line ? (next_line + 1) : NULL;
}


Absturz (Beispiel): Räume einen Speicherbereich frei, der dir nicht gehört.

ausblenden C++-Quelltext
1:
2:
int quux = 42;
free(quux); /* peng */

Für diesen Beitrag haben gedankt: tomycat
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 24.08.17 09:48 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: tomycat
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: 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



BeitragVerfasst: Do 24.08.17 10:07 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: tomycat
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Do 24.08.17 10:12 
Nö, ich meinte das Beispiel aus Wikibooks.

Für diesen Beitrag haben gedankt: tomycat