一旦创建了新的MyString对象,我的程序就会崩溃。
当stringArray [0]在构造函数中设置为null char时,我得到内存访问冲突。有什么想法吗?
这是构造函数
MyString::MyString()
{
stringSize = 0;
stringCap = 16;
stringArray[stringCap + 1];
stringArray[0] = '\0';
}
这是班级私人成员
char* stringArray;
int stringCap;
int stringSize;
以下是在main.cpp中创建对象的位置
MyString s1;
答案 0 :(得分:1)
此行不分配内存:
stringArray[stringCap + 1];
您需要将其替换为:
stringArray = new char[stringCap + 1];
不要忘记删除内存。
此处适用规则3,因为您拥有该对象拥有的RAW内存。
或者,如果您不想要动态分配,而是需要固定大小的字符串。然后,您可以更改成员的声明:
char stringArray[ <FixedSizeHere> ];
答案 1 :(得分:0)
char* stringArray;
上面的语句说,stringArray
是指向字符的指针。因此,它应该保存字符位置的地址。
stringArray[stringCap + 1];
在这里,您尝试访问位于索引stringCap+1
的字符,就像stringArray
指向一个字符数组一样。但stringArray
没有任何角色的地址位置。因此,内存访问冲突的错误。
如果你打算创建一个大小为stringCap+1
的数组,那也是错误的。
stringArray[stringCap + 1];
//^^^^^^^^^^^^^ size of the array should be compile time constant.
// i.e., integer literal, or a #defined constant or const int
看来,程序正在尝试创建大小 17 的字符数组。所以,你可以在课堂宣言中做到这一点 -
class MyString
{
stringArray[17] ;
// .....
};