謎:メモリ割り当て、valgrindのとGDBを扱っている間、私は無効なフリーでシンプルなCプログラムを書かなければならなかったLinuxのバックトレースとメモリ・マップ
#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;
}
必要に応じて、エラーを生成する:
*** Error in `./allocWithFunnyFree': free(): invalid pointer: ... ***
======= Backtrace: =========
...
======= Memory map: ========
...
次に、sdtout
とstderr
を/dev/null
にリダイレクトして出力を取り除こうとしましたが、出力がまだ印刷されていて、それが私を困惑させてしまったことに気付きました。私は命令デバッガでfree()
呼び出しの前に、プログラムを立ち止まっ
/proc/PID/fd
DIRを見上げて、再び、私は答えをオンラインで検索
すべて/dev/null
に記載されているFDさんが、それでも同じ結果を..リダイレクトしようとしたいくつかを尋ねました誰も私にこの出力がどのように出力され、どのようにリダイレクトできないのかを説明することはできませんでした。
私はオペレーティングシステム/ Linuxについてよくわからないことがたくさんありますが、ここで何が起こっているのか理解できたら幸いです。
ありがとうございます!