• ベストアンサー

エラーの意味が分からず困っております

皆さんこんにちは。 この程、C++を勉強した出した初心者です。 作ったプログラムのコンパイル作業などにも 無事成功し、 いよいよ、 プログラムを実行してみたのですが、 以下のとおり、アボートとなり、 途中で、プログラムが終了しました。 -========-========-========-========-=======-========-========- GNU MP: Cannot reallocate memory (old_size=4 new_size=536870916) アボートしました -========-========-========-========-=======-========-========- 状況を改善するために、 Googleなどで調べてみたものの、 調べ方が悪いのか、 どうも理解できるページにもたどり着けず、 質問させていただく事にしました。 どこの行で、 この状況に至るか分からなかったので、 色々と問題きり分けを進めてみたら、 下記、 「circle.put(std::string(key), std::string(value));」 の行で、エラー(アボート)にいたる事は分かりました。 ========-========-========-========-=======-========-======== if(np == NULL) { printf("メモリの確保に失敗しました\n"); exit(1); } CTL_INFO("", "(6) "); //ここまで問題なく進む circle.put(std::string(key), std::string(value)); ========-========-========-========-=======-========-======== 問題を解決するというより、 エラーの意味が分かると非常に嬉しいです。 メモリが不足しているという事でしょうか? 初心者で分かりにくい部分もあると 思いますが、 どうか皆様宜しくお願い致します。

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

  • ベストアンサー
  • namacya
  • ベストアンサー率8% (21/243)
回答No.1

メモリの確保エラーですね。 4バイトのエリアを536870916バイトに拡張する処理がエラーとなっています。

c_iamok
質問者

お礼

namacyaさん! 早々にアドバイスいただきまして ありがとうございました! 動的メモリ確保ができていないのですかね。 なるほど。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

うにゃ? なんでここで GNU MP が出てくるんだ? エラーの意味は「(GNU MP が) メモリを確保しようとしたんだけど足りなかった」ということなんだけど, そこから先はプログラム全体を見ないと分からないなぁ. ちなみに世の中にはあなたが想像するほど超能力者は多くないと思われるので, そんな circle::put なんか見せられてもほとんどの場合に全く無意味です. dousa::route や id::digest, dousa::bits などの意味や動作が全く示されていないのに, 何をどう判断しろと?

c_iamok
質問者

お礼

Tacosanさん! アドバイスありがとうございました! まあ、やはりメモリを確保出来ないのが原因なんですよね。 参考になりました。 プログラムが巨大すぎて、 全部見せるのも苦労すぎるので、 概要が見えてきたここいらで、 最後の詰めをやってみたいと思います。 超能力者を呼ぶ真似をしてすいませんでした。 ありがとうございます。

  • bleis
  • ベストアンサー率68% (11/16)
回答No.3

> 適当な10文字以内の文字を入力していました。 ならcircle.putの中が怪しいですね。

c_iamok
質問者

お礼

bleisさん! 回答ありがとうございます。 うざい初心者ですいませんです。 疑うべき概要なんですが、 「circle.put 」のどんな不備が予想される感じなものですか? 単なる予想でも、 聞かせてもらえるとありがたいです。 circle.putは次のような感じではあります。 class circle { void put(const key_type& key, const value_type& val) { dousa::route(id::digest(dousa::bits(), key))->put(key, val); } }

  • bleis
  • ベストアンサー率68% (11/16)
回答No.2

> circle.put(std::string(key), std::string(value)); この行でのkeyとvalueの値はどうなっていますか?

c_iamok
質問者

補足

早速の回答感謝いたします。 キーボードから打ち込んだ値が keyとvalueになるようにしている感じにしています。 まだ、テストで動かしている段階でしたので、 適当な10文字以内の文字を入力していました。 こんな感じです。 key:kix value:kansai

関連するQ&A