解決済みの質問
現在C言語学習中の学生です。 「実行できる各環境で可能な限り大きなサイズの配列...
現在C言語学習中の学生です。
「実行できる各環境で可能な限り大きなサイズの配列」を利用する課題が出されたのですが、どうしても配列の最大サイズを求めることができません。
最大サイズを求め、その領域を確保するために私が考えたプログラムは
#include <stdio.h>
#include <stdlib.h>
main()
{
int *num, i;
for (i = 1; ; i++) {
if ((num = (int *)malloc(sizeof(int) * i) == NULL) {
i--;
break;
}
}
printf("Max size of array is %d\n" , i);
free(num);
return 0;
}
を考えました。実行してみるとずっとforループを繰り返してプログラムが終了しないので、iの値を10000000にして実行してみても全く終了する気配がありませんでした。しかし、実際にはここまで大きなサイズを確保できないと思うので何かしらプログラムにエラーが有ると推測をしたのですが、どこを間違っているのかを見つけることがどうしても出来ずここに質問させていただいた次第です。
どうかご教授お願いいたします。
実行環境は
Mac Book Pro
Core i7 2.7GHz
メモリ 4GB
です。
-
- 質問日時:
- 2012/1/30 23:46:22
-
- 解決日時:
- 2012/2/14 12:24:54
-
- 回答数:
- 1
-
- お礼:
- 知恵コイン
- 500枚
-
- 閲覧数:
- 88
-
- ソーシャルブックマークへ投稿:
- Yahoo!ブックマークへ投稿
- はてなブックマークへ投稿
- (ソーシャルブックマークとは)
ベストアンサーに選ばれた回答
/* 二分探索を使用して、malloc()可能な最大値を求める */
#include <stdio.h>
#include <stdlib.h>
size_t max_malloc_size(size_t size_h, size_t size_l){
__size_t size;
__char *p;
__printf("%lu <= size < %lu\n", size_l, size_h);
__if (size_h == size_l + 1){
____return size_l;
__}
__size = size_h / 2 + size_l / 2;
__p = (char *)malloc(size);
__if (p){
____free(p);
____return max_malloc_size(size_h, size);
__} else {
____return max_malloc_size(size, size_l);
__}
}
int main()
{
__size_t max_size_t;
__unsigned char *p;
__int i;
__for (i = 0, p = (unsigned char *)&max_size_t; i < sizeof(size_t); i++, p++){
____*p = 0xFF;
__}
__printf("%lu\n", max_malloc_size(max_size_t, 1));
__return 0;
}
- 違反報告
- 回答日時:2012/1/31 01:15:39
この質問は投票によってベストアンサーが選ばれました!
- この質問・回答は役に立ちましたか?
- 役に立った!
お役立ち度:
0人が役に立つと評価しています。

