2014-10-26 136 views
1

在我的头文件中,我将这个向量定义为一个指针。如何给*向量添加一个值?

private: 
    vector<filteredPoint_t> *filteredValues; 

在我的cpp文件我想filterPoint_t加(结构)的实例,这个矢量。它编译。

filteredPoint_t fp; 
fp.filteredValue = 3.4; 
fp.globalIndex = 3; 
filteredValues->push_back(fp); 

然而,当我运行它,它立刻filteredValues->push_back(fp)调用后停止。显示甚至没有prinf控制台输出。尽管在控制台上没有错误消息。

缺少什么我在这里?

一些背景信息:我需要将filteredValues传递给多个线程。这样每个线程都可以写回这个变量。所以我想我会使用一个指针变量来做到这一点。

+0

你初始化该指针的东西? – 2014-10-26 14:38:35

+2

你分配矢量吗?另外,你说你想从多个线程使用它,你有适当的锁定吗? – JustSid 2014-10-26 14:38:53

回答

3

您需要首先分配内存(可能是构造函数),或者指向有效vector<filteredPoint_t>地址:

filteredValues = new vector<filteredPoint_t>() ; 

然后你可以用它来push_back

此外,还要确保你去分配在析构函数

delete [] filteredValues ; 
+0

感谢您的快速回答。作为C++的新手,我忘记了分配。 – feder 2014-10-26 20:01:21

3

这是一个指针使用new分配的内存,这意味着它必须指向一些有效的才能被使用:

vector<filteredPoint_t> *filteredValues; 

如果你不这样做,你将解引用未初始化的指针并调用未定义的行为。

初始化装置之一:

  • 具有它指向东西有效(即已经存在的载体)

    filteredValues = &existingVectorOfTheSameType; 
    
  • 创建自己一个新的堆载体,例如

    filteredValues = new vector<filteredPoint_t>(); 
    
+0

感谢您的快速回答。作为C++的新手,我忘记了分配。 – feder 2014-10-26 20:02:35