【发布时间】:2013-04-14 11:32:41
【问题描述】:
我想在一个结构体中初始化一个 char* 字符串。
这是结构:
typedef struct __String {
char* data; // C-string data,
unsigned* copyRef; // number of copy reference, delete only when the copyRef is 0
bool isACopy; // this boolean is true when *data is a ref to an other MyString
__String () {
data = 0;
isACopy = false;
copyRef = new unsigned();
*copyRef = 0;
return;
}
void addCopyRef() {
*copyRef++;
}
void removeCopyRef() {
*copyRef--;
}
} *MyString;
这就是它崩溃的地方..
void Initialize(MyString& string){
string->data = new char[LENGHT];
string->data[0] ='\0'; // this generate an error!
string->addCopyRef();
}
这是主要的:
MyString left_string, right_string, both_string;
Initialize(left_string);
Initialize(right_string);
Initialize(both_string);
第一个进展顺利,第二个不.. 你能帮我理解问题出在哪里吗?谢谢!
【问题讨论】:
-
名称
__String是为实现保留的,因此您有未定义的行为。MyString也是指针类型。你是如何调用函数的? -
LENGHT是如何定义的?你的意思是LENGTH? -
MyString是指针,可能是NULL。 -
@Pradheep,这将为一个字符分配内存并将其初始化为
len。 -
我不得不指出,将指针类型命名为
MyString是非常非常邪恶的,除非它是一个实际的 C 字符串,即使那样,重命名它仍然会非常糟糕。
标签: c++ char-pointer