前提・実現したいこと
c++初学者です。
独学での知識しかない為、暖かい目で見ていただけると幸いです。
ポインタ、配列を使用する学習をしています。
実現したいことは、不動小数点の数値を入力して単位変換できるようなプログラムを作成したいと思っています。
できる限りメモリを使わないようにコードを組みたいと思っています。
発生している問題・エラーメッセージ
開発環境:x-code
main関数の"return 0"を返す直前で以下エラーメッセージが発生します。
何が理由なのかを知りたいと思っています。
エラー調査を進める対処方法のアドバイスも頂けると嬉しいです。
エラーメッセージ
Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
該当のソースコード
#include <iostream> using namespace std; void power(double *ptr){ int number; double *p; cout << "元の単位を選択してください [1]N [2]kgf:"; cin >> number; switch (number) { case 1: p = ptr; *(p+1) = (*ptr)*0.101972; printf("[元の値] %f N\n", *p); printf("[1] %f kgf\n", *(p+1)); break; case 2: p = ptr; *(p+1) = (*ptr)*9.80665; printf("[元の値] %f kgf\n", *p); printf("[1] %f N\n", *(p+1)); break; default: break; } } void pressure(double *ptr){ int number; double *p; cout << "元の単位を選択してください [1]N/m^2 [2]N/cm^2 [3]N/mm^2 [4]kgf/m^2 [5]kgf/cm^2 [6]kgf/mm^2 [7]Pa [8]MPa:"; cin >> number; switch (number) { case 1: p = ptr; *(p+1) = (*ptr)*0.0001; *(p+2) = (*ptr)*0.000001; *(p+3) = (*ptr)*0.10197; *(p+4) = (*ptr)*0.0000102; *(p+5) = (*ptr)*0.000000102; *(p+6) = (*ptr)*1; *(p+7) = (*ptr)*0.000001; //printf("[元の値] %d doubleサイズ:", sizeof(double)); printf("[元の値] %p N/m^2\n", p); printf("[1] %p N/cm^2\n", (p+1)); printf("[2] %p N/mm^2\n", (p+2)); printf("[3] %p kgf/m^2\n", (p+3)); printf("[4] %p kgf/cm^2\n", (p+4)); printf("[5] %p kgf/mm^2\n", (p+5)); printf("[6] %p Pa\n", (p+6)); printf("[7] %p MPa\n", (p+7)); printf("[元の値] %f N/m^2\n", *p); printf("[1] %f N/cm^2\n", *(p+1)); printf("[2] %f N/mm^2\n", *(p+2)); printf("[3] %f kgf/m^2\n", *(p+3)); printf("[4] %f kgf/cm^2\n", *(p+4)); printf("[5] %f kgf/mm^2\n", *(p+5)); printf("[6] %f Pa\n", *(p+6)); printf("[7] %f MPa\n", *(p+7)); break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: break; case 7: break; case 8: break; default: break; } } /* void torque(double *ptr){ int number; double *p; cout << "元の単位を選択してください [1]N/m^2 [2]N/cm^2 [3]N/mm^2 [4]Pa [5]MPa:"; cin >> number; switch (number) { case 1: break; case 2: break; case 3: break; case 4: break; case 5: break; default: break; } } */ int main() { double value; int num; cout << "値を入力してください:"; cin >> value; cout << "変換する単位系を選択してください [1]力 [2]圧力 [3]トルク:"; cin >> num; switch (num) { case 1: power(&value); break; case 2: pressure(&value); break; case 3: // torque(&value); break; default: break; } return 0; }
試したこと
入力した数値をポインタで関数(power,pressure等)に渡し、変換結果を表示してもらうようにしたいです。
power関数ではエラーなしで実行できたのですが、pressure関数ではエラーが起きたので原因を知りたいです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/31 04:29
2021/10/31 06:34
2021/10/31 12:31