就在我认为我弄清楚的时候,我收到了异常处理错误。问题:问题是私有成员丢失了构造函数之外的信息。这是我的班级定义
代码:
class ClassType
{
private:
char *cPointer;
int length;
public:
ClassType();
// default constr. needed when allocating in main.
ClassType( const ClassType* );
char otherFunc();
};
classtype.cpp:
"#include ClassType.h"
ClassType( const ClassType* )
{
cPointer = ClassType->cPointer;
length = ClassType->length;
}
ClassType::ClassType( const char *myVar )
{
cPointer = new char[ strlen( myVar ) + 1 ] //+1 for trailing '\0'
strcpy( cPointer, myVar );
length = strlen( cPointer );
}
char ClassType::otherFunc()
{
cPointer; // Nothing is shown when debugging..
cPointer = "MyPointer"; // Results in acrash
length = 5; // Results in a crash
}
// The main function is working properly.
答案 0 :(得分:4)
ClassType(const
ClassType& rhs)
答案 1 :(得分:2)
我无法想到为什么它会在你指出的地方崩溃,但你的代码存在一些问题(其中一些是编译时问题,所以我们无法确定这段代码是否能准确反映问题):
ClassType::ClassType( const ClassType* )
时,ClassType
的哪个实例拥有cPointer
指向的对象?cPointer
可能指向由new
分配的内容,或者可能没有,因此您在尝试确定何时应删除new
分配的内容时会遇到问题。就编译时错误而言:
ClassType( const ClassType* )
的定义应以ClassType::ClassType( const ClassType* )
ClassType::ClassType( const ClassType* )
的内容应使用参数而不是ClassType
类名作为指针char ClassType::otherFunc()
需要退货声明答案 2 :(得分:2)
这是真正的代码吗?
ClassType( const ClassType* )
{
cPointer = ClassType->cPointer;
length = ClassType->length;
}
如果是这样,它必须是这样的:
ClassType( const ClassType* rhs )
{
cPointer = rhs->cPointer;
length = rhs->length;
}
此外,此构造函数不是默认的ctor:
ClassType( const ClassType* ); // default constr. needed when allocating in main.
默认ctor特别是一个接受零参数或所有参数都指定了默认值的ctor。换句话说,默认的ctor是一个可以这样调用的ctor:
ClassType myObject;
答案 3 :(得分:1)
我在other question about this code中提供了一个非常完整的答案。我认为主要问题是你的拷贝构造函数被大量破坏了。它会导致双重免费错误和其他不良。此外,由于析构函数在您分配的指针上调用delete,因此您无法将字符串文字分配给类指针。
答案 4 :(得分:0)
默认构造函数是所有参数都具有默认值的构造函数,因此接受指针的构造函数不是默认构造函数。
您的崩溃位置表明该类尚未正确构建,因此您在分配时可能会收到地址错误。
你能发帖发帖,因为这可能是看问题的关键吗?