C++での関数エラー処理

このQ&Aのポイント
  • C++の関数でエラー処理ができず困っています。yにゼロを代入して次に進みたいのですが、うまくいかず困っています。
  • 試した方法ではエラーハンドリングができず、回避処理に進めません。正しい方法を教えてください。
  • C++の関数でのyのエラー処理方法について教えてください。回避処理がうまくいかず困っています。
回答を見る
  • ベストアンサー

c++での関数エラー処理

いつもお世話になっております。 エラー処理ができず困っています。 下記の y=... という式でエラーが発生した場合(yはdoubleです) yにゼロを代入して次に進む、としたいのです。 が、以下のように書いても y=のところでエラーが発生して止まってしまい、 回避処理(catch以下)に進みません。 いろいろ調べてあれこれ直してみましたが、うまくいかず困っています。   try{ y = ((y1 - y3)*(y1 ^ 2 - y2 ^ 2 + x1 ^ 2 - x2 ^ 2) - (y1 - y2)*(y1 ^ 2 - y3 ^ 2 + x1 ^ 2 - x3 ^ 2)) / (2 * (y1 - y3)*(x1 - x2) - 2 * (y1 - y2)*(x1 - x3)); } catch (...){ y = 0; } 正しい方法をご存じでしたらぜひ教えてください。 どうぞよろしくお願い致します。

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

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 もしかして、windowsのVC++で、補足しようとしている例外は、0除算ですか?  だとすると、構造化例外処理がらみとなりますね。  例えば、   http://www.ne.jp/asahi/hishidama/home/tech/vcpp/seh.html  あたりを参照してみてください。  前提が外れなら、ちょっと解らないです。

rosafilipes
質問者

お礼

すごいです、まさにゼロ除算です。 よくあることなのでしょうか。 さっそく参照し処理できました! ありがとうございました。

関連するQ&A

  • c# の try の入れ子

    try の入れ子はどちらで処理されるのでしょうか? 例 public aaaa() { try(){ bbbb(); } catch(){ } finary(){ } } private bbbb() { try(){ xxxxx ← ここでエラーになる } catch(){ } finary(){ } } この場合、 catch()処理は aaaa() の catch() を行う?それとも bbbb() ? finary() ()処理は aaaa() の finary() を行う?それとも bbbb() ?

  • phpの例外処理がエラーをトラップしてくれない。

    以下のように例外処理を記述しした場合、 try{ //ここでエラー } catch (Exception $e){ $ErrorMsg="その他エラー:".$e->getMessage(); } tryの中で、0除算によるエラーが発生してもエラーをトラップして、例外 処理のcatchに飛びません。 どのように記述すればエラーをトラップできるのでしょか?

    • ベストアンサー
    • PHP
  • C++の例外処理

    お世話になります。 現在C++でプログラミングを行っていますが、例外処理で困っています。 次のようなコードを書きました。 try{   m_Session.DestroyDatabasePool();   }catch(CException e){   m_Share.WriteLogFile("キャッチ中", LOG_INFO ); } しかし、これだとcatchが行われず、catch(CException e)部分を(...)にすると例外処理が実行されます。 例外の詳細を知りたいので、どうしても(CException e)で行いたいです。 説明が不十分かもしれませんが、何かご存知でしたら、ご教授お願いします。

  • 例外処理

    デバッグをしてみました。 すると,try・catch文までしか実行されていないことがわかりました。 public void init() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } 例外処理について調べてはみたものの、なぜこの部分で実行が止まってしまうのか、 解決につながるようなことが,みつかりません。 1.例外処理はどのような処理なのか 2.なぜ、try・catchで実行が終了してしまうのか 教えてください。

    • ベストアンサー
    • Java
  • エラー処理が面倒?

    最近ActionScriptを勉強して初めて気づいたのですが、エラー処理は以下の2箇所でやらなければいけなくて、結構面倒を感じてしまいます。さらに、下のisErrorHandlerのfunctionを実装する際にdispatchEventで呼び出し側に通知しなければいけません。さらに、さらに呼び出し元でIO_ERRORを処理しなければいけません。 皆さんは面倒だと思いませんか?それとも私のエラー処理の仕方が悪いのでしょうか?理想的なエラー処理があればぜひアドバイスいただければ助かります。 ・try...catch文 ・hogehoge.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler)文

    • ベストアンサー
    • Flash
  • doubleの変数にintとintの割り算の結果を代入するとき

    以下のようにするとdには0.5ではなく0が代入されます。 int x = 1, y = 2; double d = x / y; これを回避するために以下のようにするのが一般的だと習いました。 //1. double d = (double)(x) / y; // これでdには0.5が代入される これを以下のようにしてしまうのに問題はあるでしょうか? //2. double d = (double)(x) / (double)(y); //3. double d = x / (double)(y); また、1.と2.と3.ではどれがより良いのでしょうか? 単純に好みの問題なのでしょうか? 以上、よろしくお願いいたします。

  • C言語で質問です。

    C言語で質問です。 F1=2*((4*sqrt(2)*cos(y)/sin(x+y))-4) F2=1*((4*sqrt(2)*cos(x)/sin(x+y))-4) という式を、 double f1(double x,double y) {return F1*sin(x)-F2*sin(y);} という部分のF1,F2に代入したいのですが、何を使えばいいのでしょうか。 いろいろ試したのですがエラーが出てしまいます。教えてください。

  • try catchについて

    try catchの動きで質問があります。 以下が簡略化したソースです。 -------ここから--------------------- ストリーム1; ストリーム2; try{ try{ //ストリーム1を使った処理 }catch(IOException e){ throw e; }finally{ //ストリーム1のクローズ } try{ //ストリーム2を使った処理 }finally{ //ストリーム2のクローズ } } catch(IOException e){ throw new hogeException(); } ------ここまで-------------------------- 内側でスローされた例外は、外側でcatchされるのですか? また、内側でcatchをしなかった場合、外側でcatchされるのですか? この2点を教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Try-catch文(FileInputStream)

    下記コードでエラーが出現して困っています。 fis.close();の部分でコンパイルエラー( 変数 fis は初期化されていない可能性があります。)の結果が返ってきます。 必ず通過するfinallyブロックにclose()処理を記述して、この処理もエラーが発生する可能性があるので、try-catchする必要があると教師が言っていました。 エラーが出現する原因はなぜでしょうか? 回答のほどよろしくお願い致します。 FileInputStream fis; try{ fis = new FileInputStream(fi.getAbsolutePath()); while( (b[i++] = fis.read()) != -1); }catch(FileNotFoundException e){ } catch(IOException e){ }finally{ try{ fis.close(); ←コンパイルエラー( 変数 fis は初期化されていない可能性があります。) }catch(IOException e){ } }

    • ベストアンサー
    • Java
  • VC++でCatchできる例外について

    DBサーバにて常駐動作させているプロセス(VS6.0にて作成したVC++のプログラム)にエラーが発生して停止してしまいました。 イベントログにてアプリケーションログ、システムログを見ると、以下のようなエラーが出ていました。(日付、ユーザ、マシン名、エラー発生アプリケーション名は伏せております) ■アプリケーションログ■ イベントの種類: エラー イベント ソース: Application Error イベント カテゴリ: (100) イベント ID: 1000 説明: エラー発生アプリケーション <プログラム名>.exe、バージョン 0.0.0.0、エラー発生モジュール MSVCRTD.DLL、バージョン 6.0.8168.0、エラー発生アドレス 0x00011920 ■システムログ■ イベントの種類: 情報 イベント ソース: Application Popup イベント カテゴリ: なし イベント ID: 26 説明: アプリケーション ポップアップ: <プログラム名>.exe - アプリケーション エラー : 例外 unknown software exception (0x80000003) がアプリケーションの 0x10211920 で発生しました。 原因が分からないため、せめて上記エラーが発生しても停止しないよう、主要処理部全体を以下のように例外処理で囲むことで暫定対応しようとしております。 try{  主要処理 }catch(...){  エラー発生時の処理 } 改修後、同様なエラーを模擬的に発生させ、停止しないことを確認しようとしましたが、「エラー発生モジュール MSVCRTD.DLL」となるエラーを発生させることができません。 上記try-catchで「エラー発生モジュール MSVCRTD.DLL」となるエラーがキャッチできるかどうか、ご存知の方はおられましたらご教示いただけないでしょうか? 宜しくお願い致します。

専門家に質問してみよう