C ++でプログラムを開発していますが、次のコードを実行すると次のエラーが発生します。
short readshort() {
short val=0;
(&val)[1]=data.front(); data.pop_front();
(&val)[0]=data.front(); data.pop_front();
return val;
}
これは私が得るエラーです:
Run-Time Check Failure #2 - Stack around the variable 'val' was corrupted.
ここで、「データ」はstd ::listdataで定義されていることを述べておきます。
何が問題なのかはわかっていると思いますが、簡単な解決策は思いつきません。このエラーは、ポインタとしてではなく、スタックに格納されている「val」が原因であると思います。「val」でデータポインタにアクセスしようとすると、このエラーが発生します。
私が考えた解決策は、次のように「val」を割り当てることでした。
short readshort() {
short* val=new short;
val[1]=data.front(); data.pop_front();
val[0]=data.front(); data.pop_front();
return *val;
}
しかし、関数の外で毎回削除せずに「val」を返すと、それを削除する方法がわかりません。これをC++でメモリリークなしで実行できる方法はありますか?以前、 "(&val)[1]"を使用して可変型(たとえばshort)をバイトに分割する人を見たことがありませんでしたが、これは多くの問題を引き起こしたためなのか、それとも既知の方法ではないのか疑問に思いました。 ?
本当の質問に戻ると、どうすればこれらの2バイトを短い(または大きなデータ型)にすることができますか?そして、私が試したものよりもこれを行うためのより良い方法はありますか?
最後に、Javaには、メモリリークを自動的にクリーンアップする自動ガベージコレクターがあることを知っています。C ++は同じ種類のデバイスを提供しますか?スマートポインタについて何か聞いたのですが、それが何であるかわかりません;)