- ベストアンサー
printf()がないとエラー
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
printf()を付け加えていない時 「たまたま動いている状態」と考えるのが妥当だと 思います。 机上デバッグでまず、50の倍数の系を丹念に追いましょう。 それでもわからないならデバッガで、セグメントエラーに なる瞬間を捕まえましょう。 デバッガを使えば、エラーになる要因がわかるはずです。 が、タイミング関連のバグであれば、デバッガを使うと printf()を外しても、セグメントエラーが起きなくなったり することもありますね。(その逆-つまり、printf()を つけているのに落ちるということ-もありますが。) ご健闘をお祈りします。 バグ退治、がんばってください。
その他の回答 (2)
- Kizz
- ベストアンサー率47% (30/63)
曖昧な意見ですが・・。 処理に直接関係のない処理文の有無によって動きに変化がある場合には、可能性としてメモリーリークが上げられます。 ※絶対とはいえませんが、その場合がおおにしてかと。 nullアクセス。初期化抜け。変数領域オーバー格納とか。 トレースして変数のアドレス値の動きを確認するのが良いと思います。 ※デバッカーを使うとアドレス値の確認は容易になりますが、デバッカーは領域をきれい勝手にやってくれて不具合が出ないようになる、なんて悩ましい場合もあったりもします。。 処理を確認しているブロック(関数内とか)で定義している変数、またはそのブロック内で使用するグローバル変数もあればそれも対象にし、確認してみるのも良いかと。 上記理由とは限定できませんので、あくまでも「ありえるケース」として受け止めてください。
初期化していないポインタかローカル変数を使ってたりしませんか? ポインタが示す先の領域をちゃんと確保しているか? または ローカル変数(関数の中で宣言している変数)を値をセットせずに参照していないか? を、チェックしてみてください。
関連するQ&A
- printf関数の振る舞い?に関して
皆様、こんにちは。 C言語のデバッグに関して詳しい方どなたか教えてください。 現在、静的SQLを使ったC言語でのプログラム開発をおこなっております。DBはIBM DB2で、マシンはAS400、言語は C/400です。最初はPCで、Microsoft Visual Stadio .NET 2003で開発して、やはりPC上のIBM DB2にアクセスしてテストしておりました。 問題のCのソースはステップ数が巨大(Cで5,000ステップ)なため、printf関数をとこどどころに入れてテストしておりました(プリコンパイル→コンパイルの作業がある為?にデバッガーは使えなかった為)。 全てのテストが完了したので、ソース上からprintf関数を全て削除して、実行させてみました。 ところがprintf文が入って、正しい結果を出力していたころのプログラムとは思えないほどの、エラーが続出しました。 まず、メモリーエラーと思われるエラー、永久ループ、重複レコード出力エラーなどです。これらは今までと、同じデータで実行したので、全く同じロジックを通るはずなのですが、まるで別人のような振る舞いをしまます。 以前、デバッガーにはデバッガー自身が動くためにメモリーを整理して実行するため、このような事がおきるとは聞いておりましたが、ただのprintf関数で、このような事が起きる事があるのでしょうか? 本プログラムはstrcpyやstrcmp関数が多用されていて、NULL -STOPが正しくセットされていないのではかと、現在調査・改修しているところです。 皆様、このような現象って何が考えられるでしょうか? 宜しくお願いいたします。
- ベストアンサー
- C・C++・C#
- 素因数分解をこの問題でどう使うのか??
問題 「a、b、cは自然数とする。 2^3a×3^2b×5^cで表せる6桁の数があり、その中央の4桁は0736であることがわかっているとき、a,b,cの値を求めよ。」 これは中学生の問題です。私は家庭教師をしているのですが、情けないことにこの問題がわかりません。この問題のテーマは「素因数分解の利用」ということなのですが、どう素因数分解を利用するのかわかりません。 ~私の解法(素因数分解の利用なし)~ 3^2b=9の倍数なので、9の倍数の性質と2×5=10を利用して6桁の数が「207360」とわかったのですが、素因数分解を利用していないので、この解法ではないと思います。そもそも9の倍数の性質を知らないと解けない問題自体見たことがありません。 素因数分解を利用する解法がわかる方はぜひ教えて下さい。お願いします。
- ベストアンサー
- 数学・算数
- 小5算数「整数の性質」について。
小学5年の算数で,整数の性質を学びます。そこでは,最大公約数や最小公倍数を求めることも扱います。そこで質問です。 この際,算数の内容に素因数分解を取り入れ,素因数分解を用いて最大公約数や最小公倍数を求めることも扱うべきだと思いますか。
- ベストアンサー
- 数学・算数
- 小5算数 整数の性質
どの程度まで扱うべきだと思いますか。以下私案: 1 約数と倍数:偶数と奇数,約数と倍数の意味,倍数の見分け方 2 素数と素因数分解:素数,素因数分解 3 最大公約数とその利用:2数及び3数の最大公約数とその利用 4 最小公倍数とその利用:2数及び3数の最小公倍数とその利用 5 2つの整数とその最大公約数・最小公倍数との関係
- 締切済み
- 数学・算数
- 32bitについて…
32bitについて… 以前、素因数分解のプログラムについて質問させていただきました。 http://okwave.jp/qa/q6132983.html int型では32bitなので、 -2147483648 ~ 2147483647(2^31-1) の値までしか扱えないことは理解しました。 もし、20桁の素因数分解をしたい場合どうすればよいのですか? long型とかですか?具体的に教えていただきたいです!! 同様に100桁でしたらどうするのでしょうか? よろしくお願いしますm(_ _)m
- 締切済み
- C・C++・C#
- 素因数分解で最大公約数、最小公倍数を求める方法
例えば 24と18を使って素因数分解すると 2 |24 18 3 |12 9 4 3 となって共通の素因数をかけて6が最大公約数 共通の素因数と、共通の素因数を抜いた数を掛けて 72が最小公倍数 というふうに求めますが これは素数である必要はあるのですか? 別に 6| 24 18 4 3 として求めても同じではないのですか? 下の方法で何か困ることはあるのでしょうか?
- ベストアンサー
- 数学・算数
- 二重ループを使うプログラムについて(C言語)
素因数分解するプログラムで、例えば360を入力したとき、 2^3 * 3^2 * 5^1 と表示するプログラムを作りたいのですが、scanfとprintfの部分は分かるのですが、肝心の二重ループの部分が分かりません…。 最後に*が表示されないようにするというのが条件なのですが、初心者で慣れてないので、詳しく教えていただけないでしょうか?
- ベストアンサー
- C・C++・C#
- 和と最小公倍数の問題
2つの自然数で、その和が4984、最小公倍数が162540であるものを求めよという問題なのですが、162540を素因数分解して2^2×3^3×5×7×43となることが分かりましたがそこからが分かりません。ご教授お願いします。
- ベストアンサー
- 数学・算数
お礼
やっとバグが取れました!ループの中で確保していない領域に アクセスし続けていてループから抜け出せない状態でした。 つまらない質問に意見をくださってhosiharaさん、hosuke_dxさん、 Kizzさん ありがとうございました!
補足
回答ありがとうございます。これからチェックしてみます。