2012-06-28 95 views
1

所以这就是这种情况。矢量push_back错误

我有一个类

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

Class B 
{ 

    L_FullQuote *Symbols[100]; 

    void handle message() 

} 

内把手味精 我有这个说法

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

代码构建fine..but当我使用生成的DLL。应用程序只是崩溃..有时它会带我到矢量中的nxt poiner错误..但大多数情况下整个应用程序只是崩溃。 没有这条线它工作正常。

请帮

感谢

+2

你有没有初始化'Symbols'数组的元素指向'L_FullQuote'对象,或者你使用未初始化的指针? – cdhowie

+0

我建议仔细看@乍得的答案。我直接回答你的问题,但他提出了一个更好的整体解决方案。 –

回答

1
L_FullQuote *Symbols[100]; 

在这里,您声明指针数组L_FullQuote,但你永远不初始化任何指针,所以当你拨打:

Symbols[i]->... 

您正在取消引用无效指针。还要注意,你已经声明time是私有的(尽管你的代码甚至不会用这种方式编译,作为AI的朋友认为是B?)

简单地声明一个指针数组不会初始化每个元素指向一个有效的对象。你需要初始化每一个,像这样:

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

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

+0

虽然这确实使代码(如写入的)工作,但我认为给OP的经验不足,OP不太可能需要一个指向另一个内存位置的100个指针的数组,但可能只需要一个对象数组使用。 – Chad

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

}; 
+0

+1更好的整体解决方案 –

-1

时间是类L_FullQuote的私有成员,从B类你没有访问该场

+0

这是一个编译器错误。 – chris