【发布时间】:2017-09-17 19:41:06
【问题描述】:
我正在尝试“初始化”我在类声明中创建的数组,但我不知道自己做错了什么。我知道当您将数组传递给函数时,它会衰减为指向第一个字符的指针。代码在我的第二行 strcpy() 处中断,但我不确定我做错了什么(我对 strcpy() 的经验很少)。
我的代码如下:
class TestClass
{
public:
TestClass(char []);
~TestClass();
void Append(TestClass);
char* m_string;
};
TestClass::TestClass(char incstring[])
{
char currentChar = 'a';
int numOfChars = 0;
while (currentChar != '\0') {
currentChar = *(incstring + numOfChars);
numOfChars++;
}
char* tmp = new char[numOfChars-1];
strcpy(tmp, incstring);
strcpy(m_string, tmp);
}
我的 int main() 很简单:
int main(){
TestClass* test = new TestClass("Hello");
}
如果值得注意的话,numOfChars 应该等于 6。
抛出的异常是:“访问冲突写入位置0xCDCDCDCD。”
【问题讨论】:
-
m_string从未初始化。 -
请使用
std::string,省去麻烦。此外,main中的new没有充分的理由:TestClass test("Hello");在没有内存泄漏的情况下也可以做到。 -
我刚刚将它初始化为nullptr,得到了同样的异常。
-
Kerrek 试图说明的一点是,在将数据从
tmp复制到m_string之前,您没有为m_string分配任何内存。这就是你崩溃的原因。 -
@aschepler 我愿意,但我的规范警告我不能使用标准容器