1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

malloc und segfaults

  • thrau
  • 3. Dezember 2009 um 17:59
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • thrau
    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
    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
    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
    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
    Punkte
    123
    Beiträge
    19
    • 3. Dezember 2009 um 19:16
    • #5

    das wars, danke :)

  • Plantschkuh!
    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.

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum