Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Aufgabe 4: Anfänger
so, ganz traditionell öffne ich den Anfänger- Thread
Ich hab da ein Problemchen mit mbt_test() (hoffentlich bin ich da nicht der einzige)… mbt_test fordert absichtlich mehr als 1 Megabyte. Mein malloc prüft die Größe, setzt errno und gibt NULL zurück, und damit wird der Test sofort beendet. Sollte ich da etwa weiter machen, seblst wenn man mehr als 1 megabyte anfordert?
ich mach mal lieber im anfänger thread weiter g,
hab a kleines problem: obwohl ich die unistd.h schon included hab, kommt noch immer foldende fehlermeldung:
halde.c: In function ‘malloc’:
halde.c:36: warning: implicit declaration of function ‘sbrk’
Er kann die Funktion nicht finden.
Demnach hast du wahrscheinlich vergessen etwas einzubinden.
“Kontaktieren sie die Man Page ihrer Wahl für weitere Informationen.” g
EDIT: @wawi: Oder so, dann kann er sie natürlich auch nicht finden.
seh ich das richtig das wir wenn wir 1MB vom BS holen, können wir maximal 1MB -16Byte allocieren, da wir ja diese zwei verwaltungs strukturen brauchen. Meine eigentliche frage ist, wenn ich einen Block free(), und dann ist ja da sagen wir mal 10Byte speicher, kann ich dann in diesen block nur noch 2 Byte effektiv speichern da ich 8 Byte für die struct mblock brauche, oder mal so (:D) wenn ich in disen block 10 Byte reinstecken will kann ich das dan so machen das ich danach keine verwaltungsstrucktur einsetzte (obwohl mir jetzt selber nicht so ganz klar ist wie ich das dann machen soll mit dem verlinken :D)
Du kannst dann maximal 1MB-8Byte allokieren, das waere der maximale Block und die Liste ist dann leer. Wenn es keinen Block gibt braucht man auch keine Verwaltungsstruktur.
Wenn der Anwender malloc(10) macht und damit 10 Byte anfordert musst Du ihm natuerlich dann auch soviel geben, von der internen Verwaltungsstruktur weiss der Anwender nichts. Intern brauchst Du dafuer dann natuerlich 18 Byte speicher um die Struktur noch unterbringen zu koennen. Wenn Du keine 18 Byte hast kannst Du der Anforderung nicht nachkommen.
das is ja genau das problem, ich benutze das makefile aus /proj/i4sos/pub/aufgabe4/ und die man page von sbrk sagt mir dass ich die <unistd.h> einbinden muss, was ich auch schon getan hab…
[m]0[/m] und [m]‘\0’[/m] sind genau identisch.
P.S. Verdammte ‘intelligente’ Forensoftware! Das hier muss man eingeben, damit man “Backslash Null” erhält: [m]\00[/m]
ja das hab ich auch im nachhinein gemerkt, naja alles von informatikern erstellt dat kann ja net gut gehen, (ja du hat natürlich recht das 0 und \0 das gleiche sind, ich hab eigntlich mehr an die ‘0’ im ascii gedacht was aber ein schmarn ist !
Jetzt laeft memstress wnigstens in Level 2 durch. Allerdings kommt noch ein Speicher zurueck bei einem malloc-Aufruf mit -1 und -2. Das erstaunt mich etwas, da ich ja teste, ob genugend Speicher vorhanden ist und -1 oder -2 doch weit ueber 1024 * 1024 - 8, was ja 2 hoch 11 - 2 hoch 3 sein sollte, liegen sollte, oder etwa nicht? Leider schmeisst mein Programm in Level 3 einen Speicherzugriffsfehler und jetzt meine Frage: wie rufe ich denn gdb oder ddd auf mit memstress 3 auf? Also gdb memstress 3 mag er nicht. Eine dumme Frage ich weiss, aber es waere trotzdem sehr hilfreich zu wissen. :listen: