繁体   English   中英

shared_ptr导致段错误

[英]shared_ptr causing segfault

我正在尝试在我的课程中使用shared_ptr,但是由于某种原因,我遇到了段错误。 也许我在做一些愚蠢的事情。

#include <tr1/memory>
#include <iostream>
class Dataset ;
typedef int DataClass;
class Dataset_Impl{
    friend class Dataset ;
    DataClass *dc;
    Dataset_Impl(){dc = new DataClass[10];}
    public:
    void getSubset(Dataset_Impl* &dObj){
        dObj = new Dataset_Impl();  //Causing segfault when using shared_ptr
        /*copy subset of 'dc' to dObj->dc and return*/std::cout<<"Copied subset";
    }
};
class Dataset{
    Dataset_Impl *d;
    public:
        Dataset (){};
        inline void const getSubset(Dataset &dObj) const{d->getSubset(dObj.d);}
};
int main(){
    Dataset m1,subset1;std::shared_ptr<Dataset> subset2;
    m1.getSubset(subset1);
    m1.getSubset((*subset2)); //Causing segfault
}

您尚未创建对象; subset2是一个空指针。 您需要创建一个对象来管理:

std::shared_ptr<Dataset> subset2(new Dataset);

有关信息,您可以使用专用功能在新分配的对象上创建shared_ptr

std::make_shared<Dataset>()

这将调用Dataset()构造函数。 如果您有第二个构造函数,比如说Dataset(int) ,则可以用整数i编写std::make_shared<Dataset>(i)

您的shared_ptr为空。 它不存储指向数据集的指针。 使用例如

 std::shared_ptr<Dataset> subset2(new Dataset) ;

您没有为shared_ptr变量创建对象,而是尝试访问指针的成员变量。 尝试

std::shared_ptr<Dataset> subset2(new Dataset())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM