に比べて、私は次のように定義され、intWrapper
という名前のint型へのラッパークラス、および2つの数値を加える機能addN
を持っている:メイン(で、のVisual Cで異なる動作++ MinGWの
intWrapper* addN(intWrapper *first, intWrapper *second)
{
intWrapper c;
c.setData(first->getData() + second->getData());
return &c;
}
を次に私はこれを行う)機能:のDev-C++(MINGW32)で
intWrapper first(20), second(40);
intWrapper* t = addN(&first, &second);
cout << (*t).getData() << endl;
これは意図したとおりに実行し、その値60
を印刷しますが、ビジュアルC++で私は値-858993460
を取得します。
しかし、新しいキーワードを使用してaddN関数内に新しいオブジェクトを作成すると、Visual C++でも60
が出力されます。私はなぜこれが起こるのか興味をそそられています。何かご意見は?
完全なコードはここにある:
#include <iostream>
using namespace std;
template<typename T, T defaultValue>
class Wrapper
{
private: T n_;
public:
Wrapper(T n = defaultValue) : n_(n) {}
T getData()
{
return n_;
}
void setData(T n)
{
n_ = n;
}
};
typedef Wrapper<int, 47> intWrapper;
intWrapper* addN(intWrapper *first, intWrapper *second)
{
intWrapper c;
c.setData(first->getData() + second->getData());
return &c;
}
int main()
{
intWrapper p;
cout << p.getData() << endl;
intWrapper first(20), second(40);
intWrapper* t = addN(&first, &second);
cout << (*t).getData() << endl;
system("PAUSE");
return 1;
}
また、VC++では、「bad memory」のすべての部分に0xbaadf00d、0xcccccccc、0xffffffffなどの値を入力するのが好きです。あなたの場合は、0xFFFFFFFFCCCCCCCCという値があります。これは、プログラムが何らかの嘔吐を飲み込んだようです。 – ActiveTrayPrntrTagDataStrDrvr
あなたは高い警告レベルを有効にするのに慣れるべきです... – PlasmaHH