创建类C++时的内存分配问题
Memory allocation problem when creating a class C++
仍在学习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中进程的内存
希望对你有帮助
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配