矢量push_back错误

时间:2012-06-28 18:19:16

标签: c++ class vector

所以情况就是这样。

我有一个班级

Class L_FullQuote
{
    private:
    vector<int> time;
    ..
}

Class B
{

    L_FullQuote *Symbols[100];

    void handle message()

}

内部句柄消息 我有这个声明

Symbols[i]->time.push_back(2);

代码构建正常..但是当我使用生成的dll时。应用程序只是崩溃..有时它需要我在向量中的nxt poiner错误..但大多数整个应用程序只是崩溃。 没有那条线就可以正常工作。

请帮忙

由于

3 个答案:

答案 0 :(得分:2)

您已经在使用vector了,为什么不采取更进一步的措施呢?使用std::vector将使您能够专注于编写功能,而不是担心内存管理。

此示例与您最初发布的内容略有不同。您的原始问题类B有一个包含100个指针的数组,每个指针都必须初始化。在下面的示例中,我们创建了std::vectorL_FullQuote个对象,这些对象最初的大小为构造函数中的100个对象。

class L_FullQuote
{
public:
    vector<int> time;
};

class B
{
public:
    // Initialize Symbols with 100 L_FullQuote objects
    B() : Symbols(100)
    {
    }

    std::vector<L_FullQuote> Symbols;

    void handle_message()
    {
       Symbols[i].time.push_back(2);
       // other stuff...
    }

};

答案 1 :(得分:1)

L_FullQuote *Symbols[100];

在这里你声明指向L_FullQuote的指针数组,但是你永远不会初始化任何指针,所以当你打电话时:

Symbols[i]->...

您正在取消引用无效指针。另请注意,您已将time声明为私有(尽管您的代码甚至不会以这种方式编译,但是作为A的朋友,我会假设?)

简单地声明一个指针数组不会初始化每个元素以指向有效对象。您需要初始化每个,例如:

for(int i = 0; i < 100; ++i) {
    Symbols[i] = new L_FullQuote();
}

只有那时你才有一个充满有效指针的数组。不要忘记释放他们!

答案 2 :(得分:-1)

time是L_FullQuote类的私有成员,来自B类,您无权访问该字段