问题描述
#include<iostream>
#include<deque>
#include<memory>
using namespace std;
class Element
{
public:
Element()
{
fptr = new float[10];
ele1 = 0;
}
~Element()
{
if (fptr != NULL)
delete[] fptr;
}
void print()
{
cout<<"ele1: "<< ele1 <<endl;
for(int i = 0; i != 10; i++)
{
cout<<"ele "<<i<<": "<<fptr[i]<<endl;
}
}
float ele1;
float* fptr;
private:
};
void InsertElement(deque<Element>& dq)
{
Element el;
float* z = new float[10];
for(int i = 0; i != 10; i++)
z[i] = i;
for(int i = 0; i != 10; i++)
el.fptr[i] = z[i];
el.ele1 = 10;
dq.push_back(el);
}
int main(int argc,char* argv[])
{
deque<Element> dq;
cout<<dq.size()<<endl; // check size of the dequeue.
InsertElement(dq); // insert a Element with a buffer of float[10]
dq.front().print();
return 0;
}
执行上述代码的结果:
0
ele1: 10
ele 0: -1.5884e+038
ele 1: -1.5884e+038
ele 2: -1.5884e+038
ele 3: -1.5884e+038
ele 4: -1.5884e+038
ele 5: -1.5884e+038
ele 6: -1.5884e+038
ele 7: -1.5884e+038
ele 8: -1.5884e+038
ele 9: -1.5884e+038
为什么这些值不符合预期,它们已在 InsertElement 函数内部修改,并且 dq 是通过引用传递的。我不知道上面的代码有什么问题? 很明显,不是数组一部分的 ele1 已经获得了在 InsertElement 函数中分配的值,而不是大批。即使我们为它分配了 0 到 9 的值,该数组似乎还没有初始化。为什么会有这种奇怪的行为?请帮我解释一下,我真的很困惑。
代码的另一个问题: 由于delete[],调用Element类的析构函数时,在程序结束时抛出异常。我之前修复过,但现在的代码导致异常。不知道为什么。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)