メモリの二重解放について
c++の勉強を最近始めた者です。
返り値を2つ返したいと思いメンバ関数内でクラスポインタを宣言、newして
それをそのまま返り値として使っていますが、deleteする場所がなくこういう場合
にどうしたら良いのかをお聞きしたいです。
クラスポインタを返り値の型として以下のような使い方をしています。
例)
■B.h
class B
{
public:
float num;
float vt;
public:
void clear(){ num = vt = 0; }
}
■A.h
'#'pragma once
'#'include "B.h"
class A
{
private:
B* value;
public:
B* cul(float b);
B* cul2(float c);
};
■A.cpp
'#'include "A.h"
A::A()
{
value = new B;
}
A::~A()
{
delete value;
}
B* A::cul(float b)
{
// 引数を使って計算
value->num = b * 2;
value->vt= b * 3;
return value;
}
B* A::cul2(float c)
{
// 引数を使って計算
value->num = c * 5;
value->vt = c / 3;
return value;
}
というようなコードとなっています。ビルドもとおり、実行できるのですが
exeを閉じようとすると次のようなエラーが出ます
Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
とでます。二重でdeleteしているという意味のようですが、デストラクタでしか
deleteをしていないのに何故このようなエラーとなるのでしょうか?
また、メンバ関数内でnewしてという方法も考えたのですが返り値として返したいので
deleteする場所がなく実施できませんでした。
c++について勉強中の身のため、質問の仕方が分かりにくくて
申し訳ありませんがよろしくお願いいたします。