还在学习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 finisata\n";
}
据我所知,所有变量都被正确分配,因为出现了“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)
因为教师要求我们该对象包含动态创建的字符串:)
答案 0 :(得分:0)
请注意确切问题究竟是什么,但可以给你一些指示。由于以下原因发生分段错误: 1)您尝试访问不在进程的地址空间中的内存区域 2)您尝试使用未初始化的指针
通过地址空间,我指的是分配给RAM中进程的内存
希望有所帮助