掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.29475

ポインタの利用数に制限は,あるのでしょうか?
投稿者---hiro(2007/01/18 16:35:55)


こんにちは.

10個のデータファイル(.txt形式)から数字を読み込んで,Cのプログラムで
計算して,それぞれの計算結果を,31個のデータファイル(.txt形式)に書か
せて,出力させようとプログラミングしました.

すると,コンパイルはできるのですが,実行させると,

「問題が発生したため,hogehoge.exeを修了します.ご不便をおかけして
申し訳ありません.」

のメッセージが出てきました.

ファイルポインタの名前の宣言に間違いがないかどうか調べたのですが,
問題が解決しませんでした.

それで,邪推ですが,「コンピュータ内で使えるポインタの利用数に
制限があるのでは?」と思い,出力ファイルの数を1つ減らしました.

すると,問題なく動いたのですが,コンピュータのスペックによって,
ポインタの利用可能数に制限は出てくるのでしょうか.

教えていただきたくよろしくお願いいたします.


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ポインタの利用数に制限は,あるのでしょうか? 29477 Blue 2007/01/18 16:41:19
<子記事> Re:ポインタの利用数に制限は,あるのでしょうか? 29478 akg 2007/01/18 16:55:30


No.29477

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---Blue(2007/01/18 16:41:19)


とりあえず、どんなコードを書いているのかアップできますか?
もしかして今まで動いていたのはたまたまかもしれませんし。
(本当はmalloc等で領域確保しなきゃいけないのにしていないとか)

再度この掲示板を利用する際には、【掲示板利用宣言】に必ず目を通してください。
(環境の提示や、HTML変換ツールの使用等)


この投稿にコメントする

削除パスワード

No.29479

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---hiro(2007/01/18 17:03:29)


>とりあえず、どんなコードを書いているのかアップできますか?

コードと言いますと,ファイルポインタの宣言をした部分と,ファイル
オープン,ファイルクローズの部分だけでよろしいでしょうか.

中身は非常に長くて,ここに載せるのが少し躊躇われますので.

環境につきまして明記せずにすみませんでした.

OSはWindows XP Pro,コンパイラは,borland C++を用いております.


この投稿にコメントする

削除パスワード

No.29478

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---akg(2007/01/18 16:55:30)


>すると,問題なく動いたのですが,コンピュータのスペックによって,
>ポインタの利用可能数に制限は出てくるのでしょうか.



どんなコードを書かれていますか?
もしかすると、ポインタの数ではなくて同時に開けるファイルの数に
制限があるのかもしれません。


この投稿にコメントする

削除パスワード

No.29486

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---yoh2(2007/01/18 21:36:22)


>もしかすると、ポインタの数ではなくて同時に開けるファイルの数に
>制限があるのかもしれません。

これ、意外と少ないんですよね。Borland C++ 5.5.1なら20だったかな?
マクロFOPEN_MAXが、同時に開けるファイル数の定義ですので確認してみて下さい。
fopen()の戻り値チェックもお忘れなく。

ポインタ数も、制限があるといえばありますが、ほとんど気にしなくてもよいい範囲かと。


この投稿にコメントする

削除パスワード

No.29488

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---akg(2007/01/18 22:03:55)


>これ、意外と少ないんですよね。Borland C++ 5.5.1なら20だったかな?


調べてみたら50でした。
いくつまで同時に開けるか実験したところ、47ファイルが同時に開けました。
標準入力、標準出力、標準エラー出力を合わせると50になるので、
勘定は合っているようです。

一方、hiroさんのところでは、41ファイルを扱おうとしています。
すべてを同時にオープンするコードだとしても、制限に引っかかりません。
きっと別のことが原因なのでしょう。



この投稿にコメントする

削除パスワード

No.29492

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---yoh2(2007/01/18 23:03:50)


>調べてみたら50でした。
>いくつまで同時に開けるか実験したところ、47ファイルが同時に開けました。
>標準入力、標準出力、標準エラー出力を合わせると50になるので、
>勘定は合っているようです。

おっと失礼。
20なのはVC++(6と2005で確認)とCygwin gcc(3.4.4で確認)でした。

>きっと別のことが原因なのでしょう。
そんな気がします。

hiroさんへ。
デバッガ上で実行させると、問題が起こった時点でのバックトレースが得られると思います。
ソースを載せる時は、バックトレースを辿って、問題が起こった箇所の周辺を載せるようにして下さい。


この投稿にコメントする

削除パスワード

No.29497

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---hiro(2007/01/19 14:06:58)


多くのご指摘,ありがとうございます.

>ソースを載せる時は、バックトレースを辿って、問題が起こった箇所の周辺を載せるようにして下さい。

実際に書いているソースは,以下のようになります.ポインタの宣言のところで躓いているようです.なお,親記事に入力ファイル10個と書きましたが,12個でした.すみませんでした.

以下のところで,何か問題等,ございますでしょうか?
ご指摘いただきたくよろしくお願いいたします.

void main(void)
{
    FILE   *fin1,*fin2,*fin3,*fin4,*fin5,*fin7,*fin9,*fin10,*fin11,*fin12,*fin13,*fin14,
        *fout1,*fout2,*fout3,*fout4,*fout5,*fout6,*fout7,*fout8,*fout9,*fout10,
        *fout11,*fout12,*fout13,*fout14,*fout15,*fout16,*fout17,*fout18,*fout19,*fout20,
        *fout21,*fout22,*fout23,*fout24,*fout25,*fout26,*fout27,*fout28,*fout29,*fout30,*fout31;
    int    hr,min,sec;
    int    day,M,DAY,zs,zc,zsr,zcr,zOUT;



この投稿にコメントする

削除パスワード

No.29498

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---akg(2007/01/19 14:14:46)


ポインタの配列に変えてみてはいかがでしょうか。


この投稿にコメントする

削除パスワード

No.29499

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---hiro(2007/01/19 14:44:55)


>ポインタの配列に変えてみてはいかがでしょうか。

お返事,ありがとうございます.
「ポインタの配列」とはどのようなことを言うのでしょうか.


この投稿にコメントする

削除パスワード

No.29500

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---akg(2007/01/19 14:56:58)


「各要素がポインタであるような配列」を「ポインタの配列」といいます。

例)
FILE *fpin[10];

fpinは、10個の要素を持つ配列です。
[0]〜[9]の各要素は、FILE *という型を持ちます。

おわかりになりますか?


この投稿にコメントする

削除パスワード

No.29501

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---hiro(2007/01/19 15:38:02)


>「各要素がポインタであるような配列」を「ポインタの配列」といいます。

すみません.よくわかりません.何か,解説をしてあるサイト等がありましたら,
おしえていただけませんでしょうか.よろしくお願いいたします.


この投稿にコメントする

削除パスワード

No.29506

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---akg(2007/01/19 21:01:03)


ポインタについて

のセクション1〜4をごらんになってみてください。
ご理解済みの内容を含んでいるかもしれませんが、それは復習ということで。


この投稿にコメントする

削除パスワード

No.29508

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---RiSK(2007/01/19 22:59:32)


>「ポインタの配列」とはどのようなことを言うのでしょうか.

単に配列は分かりますか?

int型の(要素数50の)配列なら
int array[50];

double型の(要素数50の)配列なら
double array[50];

int *型の(要素数50の)配列なら
int * array[50];
ここで「int *」は「intへのポインタ型」を表します。


この投稿にコメントする

削除パスワード

No.29510

Re:ポインタの利用数に制限は,あるのでしょうか?
投稿者---yoh2(2007/01/20 00:35:30)


ちょっと補足。
「ポインタの配列」という特殊な配列があるのではなく、単に「〜型へのポインタの配列」
という表現を省略した慣用(というほど使われてるかな?)表現です。
公式な表現という訳ではありませんので、特にこれを取り上げて解説している書籍や
サイトというものはないと思います。

> int *型の(要素数50の)配列なら
> int * array[50];
> ここで「int *」は「intへのポインタ型」を表します。

この場合、arrayは「intへのポインタ型の配列」であり、「ポインタの配列」の一種です。
なお、前の投稿でakgさんが
> ポインタの配列に変えてみてはいかがでしょうか。
と述べた時の「ポインタの配列」とは、正確には「FILEへのポインタの配列」です。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧