C言語なら俺に聞け(入門編)Part 73
■ このスレッドは過去ログ倉庫に格納されています
0300299
2010/11/14(日) 18:56:51void main()
{
unsigned char* p = (unsigned char*)malloc(123);
free(p);
}
たとえば、これは実行時にメモリエラーにならないけど。
#include <stdlib.h>
void main()
{
unsigned char* p = (unsigned char*)malloc(123);
// p が指すメモリの、一つ手前の位置の値を、異常な数値に書き換える。
*(p-1) = 0xFF;
free(p);
}
これだと、free(p); が実行時エラーになったです(gcc, eglibc)
逆に言うと、このmallocの内部的な基本ブロックとして使われてる共用体のフォーマットがわかれば、(struct malloc_unit*)(p-1)->len = 3;などと書き換えて、
free()で開放するメモリの量を勝手に多くしたり少なくしたりもできるかもしれないなぁ…と思いました。(なにもメリットありませんがw)
■ このスレッドは過去ログ倉庫に格納されています