C Programmierung / Dynamische Speicherverwaltung 1: malloc

แชร์
ฝัง
  • เผยแพร่เมื่อ 11 ม.ค. 2025

ความคิดเห็น • 14

  • @mgsstealthgirl218
    @mgsstealthgirl218 8 ปีที่แล้ว +8

    Tolles Video. Du erklärst echt gut ^^
    Schade, dass es nur so wenig Klicks hat.

  • @Wangtheman1860
    @Wangtheman1860 8 ปีที่แล้ว +5

    geiler dialekt oida ;)
    und merci fürs video

  • @SPeeDKiLL45
    @SPeeDKiLL45 6 ปีที่แล้ว +4

    schön kompakt

  • @judochessmkp
    @judochessmkp 7 ปีที่แล้ว +1

    Wo ist der wesentliche Unterschied zwischen 20*sizeof(int) und einem int array mit [81] ich versteh das nicht ?
    Aber das andere hab ich super verstanden hat auch super weitergeholfen.
    Das 20*sizeof(int ) hat doch nur den Vorteil wenn ich das Programm auf mehreren Rechnern abspiele und nicht weiß wie viel Bits verbraucht werden für ein Int - Wert , in dem Fall 1 byte 4 bits ? Aber von wo kenne ich meine Größe eben diese 20 ...um diese einzusetzen notfalls mit define ?

    • @tquaritsch
      @tquaritsch  7 ปีที่แล้ว

      Von einem int-Array mit 81 Elementen ist nie die Rede, wenn dann wäre es auch ein int[20].
      Speicher, den du mit malloc anforderst ist dynamisch - d.h. seine Größe kann zur Laufzeit festgelegt werden (z.B. aufgrund des User-Inputs).
      Bei einem int[...] Array hingegen muss beim Kompilieren festgelegt werden, wie groß es ist.
      Abgesehen davon, liegen die Speicherbereiche in einem anderen Bereich des Adressraumes, und auch die Lebenszeit ist anders (statische Arrays leben bis zum Ende der Funktion, dynamischer Speicher bis zum Programmende bzw. dem entsprechenden free-Befehl) - aber das nur nebenbei.
      Die 20 kannst du natürlich durch eine Variable ersetzen.
      Vielleicht ist nach dem Ansehen des realloc-Videos auch einiges klarer.

    • @judochessmkp
      @judochessmkp 7 ปีที่แล้ว

      Ok so weit in Ordnung...auch mit dem realloc. Ich möchte eigentlich in ein Array welches mit Malloc reserviert wurde mit gets hineinschreiben ohne die Variable selber zu ändern...da häng ich gerade

    • @tquaritsch
      @tquaritsch  7 ปีที่แล้ว +1

      Bin mir nicht sicher was du mit "ohne die Variable selber zu ändern" meinst, aber gets(deineVariable) sollte es tun.
      Nur sollte man gets eigentlich nicht verwenden, weil die Gefahr eines Buffer Overflows besteht. Wenn der User zu viel eingibt, schreibt gets über den reservierten Speicherbereich hinaus --> Sicherheitsproblem/Programmabsturz/etc. Verwende stattdessen fgets(deineVariable, anzahlDerBytes, stdin) - siehe auch www.cplusplus.com/reference/cstdio/fgets/

    • @judochessmkp
      @judochessmkp 7 ปีที่แล้ว

      wow fett funktioniert , das ist ja mal klasse , vielen Dank

  • @Loeschdurster
    @Loeschdurster 6 ปีที่แล้ว

    ich verstehe die dynamik dahinter nicht wenn wir beim kompilieren dennoch eine größe von 80 (was.. bits?!) übergeben. genauso wenig verstehe ich nicht wie aus 80 auf einmal ein array mit 20 feldern wird, laut kommentaren wäre das die umrechnung von bits in bytes aber seit wann besteht ein byte aus 4 bits?

    • @tquaritsch
      @tquaritsch  6 ปีที่แล้ว

      Statt einer fixen Größe von 80 Bytes kann auch eine Variable/Berechnung etc stehen - dann wird das ganze dynamisch. 80 Bytes / 4 Bytes pro Integer = Array mit 20 Integer-Elementen.

  • @theequalizer59
    @theequalizer59 3 ปีที่แล้ว

    Schön kompakt

  • @razapata666
    @razapata666 4 ปีที่แล้ว +1

    jawui, endlich amoi auf deitsch!

  • @zugangsta3332
    @zugangsta3332 3 ปีที่แล้ว

    Sehr gut