0

显示问题的示例源代码:

#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 类的析构函数时,它会在程序结束时抛出异常。我以前修复过,但现在的代码正在导致异常。不知道为什么。

4

0 回答 0