我正在用 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::list 数据定义的;
我想我知道问题出在哪里,但我想不出一个简单的解决方案。我认为这个错误是由存储在堆栈中的“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)拆分为字节,我想知道这是因为它引起了许多问题,还是它不是一种已知的方法?
回到真正的问题,我怎样才能把这两个字节变成短(或大数据类型)?还有比我尝试过的更好的方法吗?
最后一件事,我知道 java 有一个自动垃圾收集器,可以自动清理内存泄漏。C++ 是否提供相同类型的设备?我听说过一些关于智能指针的事情,但我不知道它们是什么;)