未处理的异常错误,内存冲突

时间:2011-03-27 18:55:11

标签: c++ string class pointers

一旦创建了新的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;

2 个答案:

答案 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] ;
     // .....
};