1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

malloc und segfaults

  • thrau
  • 3. Dezember 2009 um 17:59
  • Unerledigt
  • thrau
    4
    thrau
    Mitglied
    Reaktionen
    3
    Punkte
    123
    Beiträge
    19
    • 3. Dezember 2009 um 17:59
    • #1

    okay, mitunter eine bisschen doofe Verständnisfrage

    warum liefert mir das angefügte codestückchen keinen segfault?

    Code
    char *f = malloc(sizeof(char));
    
    
    strcat(f, "foo");
    strcat(f, "bar");
    
    
    printf("%s", f);

    ich leg für char *f ja nur ein byte speicher an. ist das compiler / system abhängig, wird da irgendetwas unsichtbar "ausgebessert"?

    ich dachte ich hätte die speicherallokierung geschnallt (so schwer ist das ja eigentlich nicht), aber das macht für mich grad keinen sinn.

  • senf
    7
    senf
    Mitglied
    Reaktionen
    14
    Punkte
    444
    Beiträge
    83
    • 3. Dezember 2009 um 18:02
    • #2

    Mit malloc legst du den Speicher am Heap an, nicht am Stack.

  • thrau
    4
    thrau
    Mitglied
    Reaktionen
    3
    Punkte
    123
    Beiträge
    19
    • 3. Dezember 2009 um 18:10
    • #3

    okay, ich schätze das ist die antwort auf meine frage, nur versteh ich die leider in der form nicht.

  • Paulchen
    1
    Paulchen
    Gast
    • 3. Dezember 2009 um 18:41
    • #4

    Würde jeder Buffer Overflow einen Segmentation Fault produzieren, wären Buffer Overflows lange nicht das Problem, das sie tatsächlich sind. In C wird nie überprüft, ob du über einen allokierten Speicherbereich hinausschreibst. Erst wenn du in einen Speicherbereich kommst, von dem das Betriebssystem weiß, dass du dort definitiv nichts verloren hast, hast du einen Segmentation Fault. Bis du dorthin kommst, kannst du aber schon recht viel in dem Speicherbereich, der deinem Programm gehört, überschrieben haben.

  • thrau
    4
    thrau
    Mitglied
    Reaktionen
    3
    Punkte
    123
    Beiträge
    19
    • 3. Dezember 2009 um 19:16
    • #5

    das wars, danke :)

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 4. Dezember 2009 um 07:03
    • #6

    ... und zusätzlich wird dir malloc vermutlich generell keinen Block der Länge 1 zurückgeben, sondern die Länge aufs nächste Vielfache von 8 oder 16 Bytes aufrunden. Von daher hast du in deinem Beispiel vermutlich zumindest 8 Bytes gekriegt, auch wenn du nur eines wolltest, und hättest so gesehen gar keinen Buffer Overflow produziert. Aber mit Sicherheit kann man das natürlich nicht wissen.

    *plantsch*

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung