Path: chuka.playstation.co.uk!news1.scei.co.jp!go From: go@cclub.tutcc.tut.ac.jp (Go Watanabe) Newsgroups: playstation.ny.program.labo Subject: Re: mallocについての質問 Date: 6 Jul 1997 07:23:41 GMT Organization: Computer Club, Toyohashi Univ. of Tech., Aichi, Japan Lines: 78 Message-ID: <5pnh5t$eg4@news1.scei.co.jp> References: <33B53C75.D79B70E0@aix.or.jp> NNTP-Posting-Host: 133.15.192.120 X-Newsreader: mnews [version 1.19PL2] 1996-01/26(Fri) # ううう、記事がまた切れてる # 補填して再ポスト こんばんは、ごうです。 <33B53C75.D79B70E0@aix.or.jp>の記事において kazta-ta@aix.or.jpさんは書きました。 >こんにちは,高田です。 >今回久しぶりに黒PSでプログラムをしていてmallocでつまってしまいました。 > >プログラムで, > > ASprite = (TEgAnimateSprite *)malloc( sizeof(TEgAnimateSprite) ); > >   (注:TEgAnimateSpriteはtypedefされた構造体) > >とするとそこの部分でプログラムが止まってしまいます。 >これを > > ASprite = (TEgAnimateSprite *)realloc( > ASprite , sizeof(TEgAnimateSprite) ); > >のようにすると,なんの問題もなく動きます。 >黒PSのライブラリのバグでしょうか? >それとも何か使い方が悪かったでしょうか? うーん、みたところ特に問題はないようですが.... realloc のほうは動いてるのが怪しいです(^^; 私はmalloc 好きなので、自分のプログラムのいたるところで つかってますけど特に問題は発生していないです。 可能性としては、malloc が使っている領域をなにか別のデータとかで 壊してしまっているとかでしょうか。で、malloc するときに その情報がたどれなくて、さようならしてるとか... このての問題はプログラムの部分だけではわからないものです。 # デバッガで追跡したらそれなりに簡単なんですけど.... >ちなみに,はインクリュードしてます。 これはとくに include しなくても stdlib.h のほうから読まれますね。 C 言語としての標準ヘッダファイルは stdlib.h なので、そちらを使う 習慣をつけておくと他の環境でも役立ちます。  さらに話はそれますが、私は malloc をつかうときは次のように書きます。 typedef struct SomeStruct { .... } SomeStruct; /* struct と typedef は名前空間が違うので同じ名前でOK */ ..... SomeStruct *p; p = malloc(sizeof(*p) * NEED_NUM); こうしておくと、あとで構造体の名称とかを変更したりしたときに、 書き換える場所が少なくなります。誤記によるバグも減るでしょう。 ほかにも sizeof はいろいろ有効です。配列のサイズを指示するのにも 使えます。 char buf[1024]; ...... fgets(buf, sizeof(buf), fp); あと配列の個数を知るのにも使えます。 int array[] = { 1,2,3,4, ....}; /* なんこあるかなぞ。適当に足す場合もある*/ arraynum = sizeof(array) / sizeof(array[0]); /*コンパイラに数えてもらう*/ ちなみに sizeof の () は本来不要ですが、周辺との優先順位がどっちが 高いかよくわからなくなるので:-)私はいつもつけてます。 うーん余談のほうがながくなっちゃいましたね。 ではでは -- 渡邊 剛 (Go Watanabe) go@dsl.ics.tut.ac.jp / go@cclub.tutcc.tut.ac.jp XMascot普及キャンペーン http://cclub.tutcc.tut.ac.jp/xmascot/ : (金)東リ43b