当初、私のラボでは、addFractionJesseR(*lFrac, *rFrac, **resFrac); という 3 つの引数を渡していました。しかし、3 つの引数を渡すことができないことがわかりました。**resFrac = addFractionJesseR(*lFrac, *rFrac); に変更する必要がありました。そして今、コンパイルに問題があります。ポインターとダブルポインターがどこかで範囲外であることはわかっていますが、どこを見つけることができません。デバッガーは問題として 2 行目を示します。
FractionJesseR& FractionJesseR::operator=(const FractionJesseR& arg) {
num = arg.num;
denom = arg.denom;
return *this;
}
これは次のように呼び出されます:
FractionJesseR& addMenu(FractionJesseR* lFrac, FractionJesseR* rFrac) {
int option;
FractionJesseR** resFrac = new FractionJesseR*();
......
case 2:
cout << "Calling add() --\n\n";
**resFrac = addFractionJesseR(*lFrac, *rFrac);
break;
......
**resFrac = addFractionJesseR(*lFrac, *rFrac); 元は addFractionJesseR(*lFrac, *rFrac, **resFrac); でした。
これは次のように呼び出されます:
void displayMenu() {
int option;
FractionJesseR *lFrac = nullptr;
FractionJesseR *rFrac = nullptr;
FractionJesseR *resFrac = nullptr;
......
case 2:
cout << " Adding Option --\n\n";
if (lFrac == nullptr && rFrac == nullptr) {
cout << " Not a proper call as no Fractions are available!\n\n";
}
else {
*resFrac = addMenu(lFrac, rFrac);
}
break;
*resFrac = addMenu(lFrac, rFrac) はもともと addMenu(lFrac, rFrac, &resFrac) でした
(はい、私はすべてのポインターで削除を呼び出しました。私はまだスタック オーバーフローに慣れておらず、関連するコードのスニペットのみを配置することを学んでいます)正しい方向に向ける助けが必要です。addMenu または displayMenu のどこかでポインタが範囲外になっていると思います...二重ポインタの逆参照が間違っているのでしょうか?
どんな助けでも大歓迎です!
編集:
FractionJesseR& addFractionJesseR(FractionJesseR& lFrac, FractionJesseR& rFrac) {
int n = 0;
int d = 0;
FractionJesseR *resFrac = nullptr;
// Adding the fractions
n = (&lFrac)->getNum() * (&rFrac)->getDenom() + (&lFrac)->getDenom() *
(&rFrac)->getNum();
d = (&lFrac)->getDenom() * (&rFrac)->getDenom();
resFrac = new FractionJesseR(n / gcd(n, d), d / gcd(n, d));
if (d < 0) {
d = -d;
n = -n;
}
return *resFrac;
}