创建类C++时的内存分配问题

Memory allocation problem when creating a class C++

本文关键字:内存 分配 问题 C++ 创建      更新时间:2023-10-16

仍在学习C++,:)仍然有特定的错误。我有一个对象,组成如下:

class document {
private:
    char *denumire;
    char *tema;
    char *autorul;
    int num_pag;
    data last_edit;
public:
    document();
    document (const char *s1,const char *s2,const char *s3, int i1, data d1);
    document (const document&);
    document (const char *s1);
    ~document ();
    void printdoc(void);
    void chden(char *s);
    void chtema(char *s);
    void chaut(char *s);
    void chnumpag(int n);
    void chdata(data d);
};

问题是当我尝试使用以下构造函数初始化它时,我得到分段错误:

document::document (char *s1, char *s2, char *s3, int i1, data d1) {
    denumire=new char[strlen(s1)+1];
    strcpy(denumire,s1);
    tema=new char[strlen(s2)+1];
    strcpy(tema,s2);
    autorul=new char[strlen(s3)+1];
    strcpy(autorul,s3);
    num_pag=i1;
    last_edit.an=d1.an;
    last_edit.luna=d1.luna;
    last_edit.zi=d1.zi;
    cout <<"Setarea documentului finisatan";
}

据我了解,所有变量都正确分配,因为出现消息"Setarea documentului finisata",然后出现段错误。所有代码都可以正常编译,没有任何警告。另外,我试图在谷歌上搜索一些东西,但找不到与我类似的情况。这种奇怪行为的原因可能是什么?

PS:复制构造函数的实现:

document::document (const document& a) :
    denumire(new char [strlen(a.denumire)+1]),
    tema(new char[strlen(a.tema)+1]),
    autorul(new char[strlen(a.autorul)+1]),
    num_pag(a.num_pag),
    last_edit(a.last_edit)
{
    strcpy(denumire,a.denumire);
    strcpy(tema,a.tema);
    strcpy(autorul,a.autorul);
}

我从一位老师的例子中吸取了教训。此外,我通过以下方式初始化变量:

document c(s1.c_str(),s2.c_str(),s3.c_str(),i1,d1)

因为老师要求我们对象包含动态创建的字符串:)

注意确定到底是什么问题,但可以给你一些指示。分段错误的原因如下:1) 您尝试访问不在进程的地址空间中的内存区域2) 您尝试使用未初始化的指针

地址空间是指分配给RAM中进程的内存

希望对你有帮助