ここから本文です

解決済みの質問

現在C言語学習中の学生です。 「実行できる各環境で可能な限り大きなサイズの配列...

konnichiwa_gokigenyouさん

現在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
です。

違反報告

ベストアンサーに選ばれた回答

umiushi711さん

/* 二分探索を使用して、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;
}

この質問は投票によってベストアンサーが選ばれました!

この質問・回答は役に立ちましたか?
役に立った!

お役立ち度:お役立ち度 0点(5点満点中)0人が役に立つと評価しています。

知恵ノートとは?

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

話題のキーワード

[カテゴリ:C言語関連]

違いがわかる知恵袋

[カテゴリ:C言語関連]

ただいまの回答者

01時40分現在

2324
人が回答!!

1時間以内に4,240件の回答が寄せられています。

>>回答ひろばに行く


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する