- ベストアンサー
mallocでメモリーを確保しようとすると暴走します
組み込み系のプログラミングをやっているもので、malloc、freeを使って動的にメモリーの確保、開放を行っているのですが、途中で暴走してしまいます。 (mallocを呼び出すと、返ってこなくなります。) そこでmallocの動作を見ようと、以下のプログラムを作って動作させると、while文の中を一周はするのですが、2週目のp2のポインターの値が返ってきません。(malloc関数の中でloopしています。) /* 以下ソースコード */ char *p1; char *p2; char *p3; char *p4; while(1){ p1 = (char*)malloc(100); p2 = (char*)malloc(100); p3 = (char*)malloc(100); free(p3); p4 = (char*)malloc(100); free(p4); free(p2); free(p1); } ※メモリーは、2k確保していあるので、サイズがオーバーしているということはないと思います。 ご質問ですが、 ・上記ソースコードで暴走するような要因がありますでしょうか? ・malloc、free関数でメモリーの取得、開放の順番など注意しないといけないことがあるのでしょうか? ・malloc、free関数等を自作とかされていますでしょうか? どうぞよろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- jacta
- ベストアンサー率26% (845/3158)
回答No.3
- a-saitoh
- ベストアンサー率30% (524/1722)
回答No.2
- alesi_sato
- ベストアンサー率35% (23/65)
回答No.1
お礼
ご回答ありがとうございます。質問に書いてあるプログラムが途中で止まる件は、解決しました。 stdlib.hをインクルードしていないという凡ミスでした。大変ご迷惑おかけいたしました。 しかしながら、本来のプログラムは相変わらず動作しません。 質問に書いたmalloc、free関数の中でループしている現象ではなく、sbrkで領域が確保できずエラーになってしまいます。 メモリーリークしているようなので、後は、回答者様のご意見を参考に、プログラムをもう一度見直してみます。 どうもありがとうございました。