【发布时间】:2018-06-03 07:23:48
【问题描述】:
如果我犯了一个非常愚蠢的错误,请原谅我第一次使用 shared_ptr 并帮助我克服这个分段错误。
我希望有一个私有的vector,即使对象被销毁,它也可以从不同的类中读取。因此我读到了std::shared_ptr
代码在storeCounterData 函数中给出了段错误
提前感谢您的帮助!!!
main.cpp
#include <iostream>
#include "counter.hpp"
#include "getCounter.hpp"
const int max_ports = 3;
int main()
{
Counter *counter = new Counter(3);
counter->age = 1;
counter->id = 12;
counter->pincode = 123;
std::vector<Counter*> counterData;
std::cout<<"inside main"<<std::endl;
counter->storeCounterData(counter,0);
counter->storeCounterData(counter,1);
counter->storeCounterData(counter,2);
std::cout<<"inside main calling getCounterData"<<std::endl;
counter->getCounterData(counterData);
Counter countji(3);
countji.getCounterData(counterData);
//getCounterData class function
getCounter *gcount = new getCounter();
gcount->printCounterData();
return 0;
}
计数器.hpp
#ifndef COUNTERHPP
#define COUNTERHPP
#include <vector>
#include <memory>
class Counter
{
private:
typedef std::shared_ptr<Counter> sharedCtr;
std::vector<sharedCtr> vecData;
public:
Counter();
Counter(int vecSize);
int age, id, pincode;
void storeCounterData(Counter *counter,int user);
void getCounterData(std::vector<Counter*> &counter);
};
#endif
计数器.cpp
#include "counter.hpp"
#include <iostream>
#include <vector>
Counter::Counter()
{
}
Counter::Counter(int vecSize):vecData(vecSize)
{
}
void Counter::storeCounterData(Counter *counter,int user)
{
vecData[user]->age = counter->age;
vecData[user]->id = counter->id;
vecData[user]->pincode = counter->pincode;
std::cout<<"vector size inside storeCounterData = "<<vecData.size()<<std::endl;
}
void Counter::getCounterData(std::vector<Counter*> &counter)
{
std::cout<<"vector size inside getCounterData = "<<vecData.size()<<std::endl;
for (auto& c : vecData)
{
std::cout << c->age << std::endl;
std::cout << c->id << std::endl;
std::cout << c->pincode << std::endl;
}
}
输出
火箭筒~/VECTOR$ ./a.out
主目录
分段错误(核心转储)
【问题讨论】:
-
你在哪里给
vecData一个尺寸? -
@melpomene 通过构造函数 Counter::Counter(int vecSize):vecData(vecSize) { }
-
哦,这太令人愉快了。 Firefox 中的页内搜索已损坏。它没有发现
vecData的出现。 -
您正在访问大小为 3 的向量中的第 4 个元素。
-
好的,即使我将 0 1 2 作为用户传递,段错误仍然存在问题是我使用和初始化 shared_ptr 的方式
标签: c++ vector shared-ptr