free() で失敗!! C言語
callocとかmallocとかで、メモリを確保して使用した後は解放するために、
free()を使うことになるんだけど、
ここで、残念なミスをおかしていたので、メモしとく。
free()の引数はきちんと制御してないとダメ!!
今回やらかした過ちはfree()の引数が割り当てられていないにも関わらず
free()しようとしてしまうルートをつくってしまったという内容だった…
free()ってそんなに万能じゃないのね…
処理系によるのかな?
ちなみにcallocとかは stdlinb.hに入ってて、ヒープメモリから任意のメモリサイズを割り当てることかできます。
たぶん、普通は↓みたいな感じ
#include <stdio.h> #include <stdlib.h> int8_t test_func(uint8_t val) { uint8_t *p; /* 256個のuint8_tサイズのメモリを確保 */ p = (int *)calloc(256,sizeof(int)); /* 何らかの事情でメモリ確保できなかったとき */ if(NULL == p) { return (-1); } /*-----------------------*/ /* ここで p を好きに使う */ /*-----------------------*/ /* メモリの開放 */ free(p); return 0; }
でも↓みたいになると
#include <stdio.h> #include <stdlib.h> int8_t test_func(uint8_t val) { uint8_t *p; if ( 1 == val ) { printf("ちゃんと勉強しなさい\n"); } else { /* 256個のuint8_tサイズのメモリを確保 */ p = (int *)calloc(256,sizeof(int)); /* 何らかの事情でメモリ確保できなかったとき */ if(NULL == p) { return (-1); } /*-----------------------*/ /* ここで p を好きに使う */ /*-----------------------*/ } /* メモリの開放 */ free(p); return 0; }
test_func(1)でコールしたときに残念な結果になってしまいますね。。。
Good Luck to オレ!!