所以情况就是这样。
我有一个班级
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错误..但大多数整个应用程序只是崩溃。 没有那条线就可以正常工作。
请帮忙
由于
答案 0 :(得分:2)
您已经在使用vector
了,为什么不采取更进一步的措施呢?使用std::vector
将使您能够专注于编写功能,而不是担心内存管理。
此示例与您最初发布的内容略有不同。您的原始问题类B
有一个包含100个指针的数组,每个指针都必须初始化。在下面的示例中,我们创建了std::vector
个L_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类,您无权访问该字段