1

所以就是这种情况。

我有一堂课

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

Class B
{

    L_FullQuote *Symbols[100];

    void handle message()

}

里面句柄味精我有这个声明

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

代码构建良好..但是当我使用生成的 dll 时。应用程序只是崩溃了..有时它会让我在向量中出现一个 nxt 指针错误..但大多数情况下整个应用程序只是崩溃了。没有那条线它工作正常。

请帮忙

谢谢

4

3 回答 3

2

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

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

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...
    }

};
于 2012-06-28T18:24:16.897 回答
1
L_FullQuote *Symbols[100];

在这里,您声明了一个指向 的指针数组L_FullQuote,但您从未初始化任何指针,因此当您调用时:

Symbols[i]->...

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

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

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

只有这样你才有一个充满有效指针的数组。不要忘记释放它们!

于 2012-06-28T18:22:21.277 回答
-1

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

于 2012-06-28T18:24:33.227 回答