Während mit Speicherzuweisung zu tun, valgrind und gdb, ich hatte ein einfaches C-Programm mit einer ungültigen frei schreiben:Mysterious Linux Backtrace und Speicherkarte
#include <stdlib.h>
#include <stdio.h>
int main (void)
{
int* arr = (void*) malloc(100 * sizeof(int));
arr[50] = 10;
free(arr + (20 * sizeof(int)));
printf("arr[50] = %d\n", arr[50]);
return 0;
}
, die einen Fehler erzeugt, wie gewünscht:
*** Error in `./allocWithFunnyFree': free(): invalid pointer: ... ***
======= Backtrace: =========
...
======= Memory map: ========
...
Dann habe ich versucht, die Ausgabe durch Umleiten sdtout
und stderr
zu /dev/null
zu entfernen, aber bemerkte, dass die Ausgabe immer noch gedruckt werden würde, die mich verblüfft ließ.
ich das Programm eine Anweisung vor dem free()
Aufruf mit einem Debugger stoped, sah das /proc/PID/fd
dir und wieder versucht, alle aufgeführten fd des zu /dev/null
aber noch gleiche Ergebnis Umleiten ..
ich nach Antworten online recherchiert und fragte einige von meinen Kollegen, aber niemand konnte mir erklären, wie diese Ausgabe gedruckt wird und warum sie nicht umgeleitet werden kann.
Sicher gibt es immer noch viele Dinge, die ich nicht über Betriebssysteme/Linux weiß, aber ich hoffe, Sie können mir helfen zu verstehen, was hier vor sich geht.
Danke!