• ベストアンサー

malloc.cを見たい

TurboLinux10でとあるプログラムを実行していましたが、 coreファイルを吐き出してGUIが終了してしまうことがあります。  gdb -c core.**** 実行ファイル名 というコマンドでGUIが終了した原因を調べたところ、  kernel/malloc.c:3415  kernel/malloc.c そのようなファイルやディレクトリは見つかりません。 と出ていました。 malloc.cというソースファイルを見たいのですが、 どこから入手すればよいでしょうか。 TurboLinux10は「全パッケージ」を選択してインストールしており、 カーネル再構築もできるのでカーネルのソースファイルは入っているはずですが、 最低3415行もあるmalloc.cは存在しません(十数行の同名ファイルはありました)。 TurboLinux10DesktopのソースファイルをFTPサーバーからダウンロードしようと、 ftp://ftp.turbolinux.co.jp/pub/TurboLinux/TurboLinux/ia32/Desktop/10/source/SRPMS/ に行ってみたのですが、 勿論malloc.cが入っていそうなパッケージがわかりません。 (そもそも、「malloc.cが見つからない」と出た場合にmalloc.cを入手してくるべきなのでしょうか)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

# rpm -ihv glibc-2.3.2-10.src.rpm # cd /var/src/rpm/SPECS # rpmbuild -bp glibc.spec # cd /var/src/rpm/BUILD/glibc-2.3*/malloc/ # ls malloc.c いかがでしょう?

tktk1228
質問者

お礼

回答ありがとうございます。 挙げていただいたコマンドで無事見ることができました。 ぱっと見た限りでは、なんでココ3415で落ちるんだろう、という印象だそうですが。 ありがとうございました。

その他の回答 (1)

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.1

お探しのmalloc.cはglibcのものでしょう。 ただし、malloc関数よりも、coreを吐くプログラムにバグがある可能性の方が高いと思います。

tktk1228
質問者

補足

回答ありがとうございます。 >お探しのmalloc.cはglibcのものでしょう。 glibcの中に入っているのでしょうか? FTPサーバーからglibc-2.3.2-10.src.rpmをダウンロードし、 rpm -ihv glibc-2.3.2-10.src.rpmで、 /var/src/rpm/SOURCESにglibc-2.3.2-10.src.rpmの中身が展開したようなのですが、 ここからmalloc.cというファイルの中身を見るにはどうしたらよいでしょうか。 /var/src/rpm/SOURCESには.patchや.tar.bz2といったファイルがあったのですが、 ためしにbzcatで.tar.bz2を解凍してみたところ、延々と何かが展開し続けてしまい、結局強制終了しました。 ここからmalloc.cというファイルを取り出すことはできないのでしょうか。 >malloc関数よりも、coreを吐くプログラムにバグがある可能性の方が高いと思います。 重々承知しております。 こちらは別の人間が探しております。

関連するQ&A

  • Turbolinux10はFTPからダウンロード出来ますか?

    表題の通りなのですがTurbolinux10 DesktopはFTP提供されてるんでしょうか?それともパッケージ販売だけなんでしょうか?各FTPサイトを覗いてみましたが、Turbolinux10らしきディレクトリはあるんですけどISOイメージが見つかりません。初歩的な質問ですいません。。。

  • RHEL ES 4のkernel-source

    RedHat Enterprise Linux ES 4のインストール中です。 SMP対応のカーネルソースをダウンロードしたいのですが、FTPサイトには 通常のカーネルソースしか見当たりません。 ftp://updates.redhat.com/enterprise/4ES/en/os/SRPMS/kernel-2.6.9-11.EL.src.rpm どこでダウンロードすることができるのでしょうか? ちなみに、このサーバで「uname -r」を実行した結果は下記のとおりです。 2.6.9-11.ELsmp

  • mallocの使い方

    すいません初心者な僕に教えて頂きたいことがあるます。 1行64バイトのファイル(行数可変)のデータに何回も文字列の検索を行ういアウトプットするプログラムを作っています。 fgetsを使い何回もファイルを読み込んで一行ずつ比較するというようにできたにはできたのですが、 行数可変で多い場合100000行超えたりするファイルに対してはえらい時間がかかります。 mallocが良いとはわかったのですが、なかなかうまく組めません。 ご教示願えませんでしょうか。 ↓のような文字列があり 型番 要素1 要素2 要素3 A 1044 100 123 A 1055 277 155 B 100 115 224 C 115 277 885 B型番の要素2がB型番の要素と一致した時B型番の要素2と要素3に一致するC型番の文字列を探しだすというようなプログラムです。 これがA、B、C共にソートされずランダムに並んでいます。 検索する度に毎回ファイルを読み込まず、一括でメモリに溜め込み、その中から文字列を抜き出し比較したいと思っています。。 長くなりましたが宜しくお願いします。

  • FTPサイトからファイルを一気にダウンロードってできないの?

    FTPにあるRPMをDVDに焼いて保存しておこうかなと思っているのですが、一つずつしかダウンロードできません。一気にダウンロードして保存できないものでしょうか。 これです↓ ftp://ftp.turbolinux.com/pub/TurboLinux/TurboLinux/ia32/Desktop/10/install/turbo/RPMS/ FTPはサーバーにファイルとかをおいてある状態だという理解です。知識が無くて操作も怪しいです・・・。

  • ヘッダファイル? malloc.hとかは自分で足したり作ったりできるのでしょうか

    CmachineでC言語を勉強していて、メモリの確保までたどり着きました。 でも、プログラムを実行できないんです。調べたところ、malloc.hやmemory.hがCmachineのincludeフォルダに入っていませんでした。 char *b; b = (char *)malloc(sizeof(char)*200); とか書いても実行できませんよね・・・。Cmachineは勉強するのに便利だし、ヘッダファイルを追加できないのでしょうか。includeフォルダにテキストファイルで書いて入れればできそうなのですが。 ちなみに、Visual C++ Express Editionでも同じプログラムを実行したのですが、できませんでした。あれもヘッダファイルが無いとかの問題なのでしょうか。あれは操作が複雑で難しくてよくわかりません。 アドバイスやいい方法をご存知の方、教えてください!!

  • リナックス カーネルの c言語ソースについて

    リナックスの質問です。 (超初心者です) カーネルの c言語ソースは どうしたら見られるのでしょうか。 (ウィンドーで) カーネルをネットからダウンロードして、 TAR.BZ2自己解凍モジュールで、解凍しました。 解凍ファイルは いろいろディレクトリーに分かれており、 様々のものがありますが、C言語ソースが見あたりません。 (ファイルを開けてみましたが 何がなにやら、わからないのが正直なところです) と言うより、どれがカーネルの本体かと、謎は深まるばかりです。 日経リナックスムックの 自分で作るリナックスOS で、いろいろ勉強するのですが 「カーネルのソースを見る」 で行き詰まっています。 トンチンカンな質問かもしれませんが、教えてください。

  • シェルスクリプトのコメントアウト

    TurboLinux10Desktopの設定ファイルをいじって起動を早くしたいと試行しています。 といってもまだ、必要なさそうな記述をコメントアウトするくらいのことしかできていませんが。 今は1行1行先頭に「#」を付けてコメントアウトしているのですが、 範囲をコメントアウトする記述は無いものでしょうか? C言語でいう、/* */ のような記述があると楽なのですが。 よろしくお願いします。

  • mallocの挙動について

    現象自体は解決してるのですが、私自身イマイチ理解できていないので質問させて下さい。 [問題] C言語で書かれたある32bitアプリを32bitのサーバA、64bitのサーバBでそれぞれ実行すると、サーバAは正常終了し、サーバBはmallocでNULLポインタが返され異常終了した。  サーバA:Windows Server 2003 R2 Standard Edition SP2 メモリ4GB実装  サーバB:Windows Server 2003 R2 Standard x64 Edition SP2 メモリ6GB実装 ・ソースをデバッガで確認したがメモリリーク等はなさそう。(_CrtSetDbgFlagや_heapchk()も試しました)。 ・実行結果もサーバAは期待した実行結果が得られています。 ・メモリの最大使用量は1.6GB弱の様です。 ・開発環境は”WindowsXP+Visual Studio 2003”です。 ・両サーバ共に私の占有状態で、余計なプロセスは実行されておりません。 ・サーバAは3GBオプション(boot.ini)を使用していません。 [解決法] プロジェクト-プロパティ-リンカ-システム-大きいサイズのシステムの項目で、  ”2GBを越えるアドレスをサポートする(/LARGEADDRESSAWARE)” に設定してビルドするとサーバBでもアプリが正常終了するようになりました。 [質問] 私の認識としては上記オプションは2GB以上のメモリを使用できるようにするだけで、使用するメモリ量が2GB以内なら、どちらのサーバで実行しても同じだと思っていたのです。 なので、このオプション無しでメモリが多い方のサーバBでmallocのメモリ確保が失敗する現象の関連性がいまいち理解できていません・・・ この件で知識をお持ちの方ご教授願えませんか?

  • C言語による実行

    C言語で記述したソースプログラムを入手しました。これをコンパイルして実行する具体的な方法を教えて下さい。私は、MS-Fortran,FBASICのソースプログラムからコンパイルし、実行することをしております。

  • new と malloc によるメモリの動的確保について

    初めて投稿させて頂きます。よろしくお願い致します。 現在、以下のような、2次元配列による動的なメモリの確保を意図して、コードをC/C++にて記述しています。 (コンパイラはMINGW32のg++ 3.4.5) //mallocによるメモリ動的確保 data = (char **)malloc(num * sizeof(char*)); for(i=0; i<rowNum; i++){ data[i] = (char *)malloc(sizeof(char)*256); } //newによるメモリ動的確保 data = new char*[rowNum]; for(i=0; i<rowNum; i++){ data[i] = new char; } C++で書くのならば、 「mallocによるメモリ確保は辞め、newによるメモリ確保をしなさい」 という指摘が、書籍でもwebでもありましたので、 両方書き、両者を比べているのですが、理由がイマイチ分かりません。 10万行ほどのテキストデータで実験させてみたのですが、 mallocによる記述の方が、動作が数秒速いようなのです。 それで、new やmalloc で実際何をやっているのか、コードを見ようと思ったのですが、 newでは、 void* operator new(std::size_t) throw (std::bad_alloc); void* operator new[](std::size_t) throw (std::bad_alloc); void* operator new(std::size_t, const std::nothrow_t&) throw(); void* operator new[](std::size_t, const std::nothrow_t&) throw(); inline void* operator new(std::size_t, void* __p) throw() { return __p; } inline void* operator new[](std::size_t, void* __p) throw() { return __p; } というnewファイルの記述で行き詰まり、 malloc は malloc_allocator.hというファイルで行き詰りました。 以上を踏まえて、 1)そもそも、上記のメモリ動的確保記述はスマートな書き方なのか 2)実際に、newやmallocは、どういった手法でメモリ領域を確保しているのか 以上の2点について、ご教授下さい。よろしくお願い致します。