我试图用我自己的String类在控制台中创建基于文本的冒险游戏。尽管我在指针失去价值时遇到了麻烦。 这里是我认为会导致问题的类的减少版本。 ReadAndLog()将'string'的值设置为用户输入。当调用ToUpper()时,该值仍然是正确的,但是在输入长度函数时,'string'位置处的值是垃圾数据。任何对发生的事情的了解都会很棒。提前致谢。输入函数时指针丢失值
STRING.H:
#ifndef STRING_H_
#define STRING_H_
class String
{
public:
String();
~String();
int Length();
String & ToLower();
String & ToUpper();
void ReadAndLog();
private:
char * string;
};
#endif
String.cpp:
#include "String.h"
String::String()
{
string = nullptr;
}
String::~String()
{
if (string != nullptr)
{
delete[] string;
string = nullptr;
}
}
int String::Length()
{
if (string == nullptr)
return 0;
else
{
for (int i = 0; true; i++)
{
if (string[i] == '\0')
{
return i;
}
}
}
}
String & String::ToLower()
{
int length = Length();
for (int i = 0; i < length; i++)
{
if (string[i] >= 'A' && string[i] <= 'Z')
string[i] += 32;
}
return *this;
}
String & String::ToUpper()
{
int length = Length();
for (int i = 0; i < length; i++)
{
if (string[i] >= 'a' && string[i] <= 'z')
string[i] -= 32;
}
return *this;
}
编辑 - ReadAndLog改变
void String::ReadAndLog()
{
char charArray[256];
std::cin.getline(charArray, 256);
for (int i = 0; true; i++)
{
if (charArray[i] == '\0')
{
if (string != nullptr)
{
delete[] string;
string = nullptr;
}
string = new char[i + 1];
for (int j = 0; j < i; j++)
{
string[j] = charArray[j];
}
string[i] = '\0';
break;
}
}
File::LogEntry((String)"User", string);
}
正在调用的代码是Game.cpp其中电话:
String input;
input.ReadAndLog();
input.ToUpper();
_'delete [] string;'_你从哪里为你的'string'分配了内存?我无法从你的样本中发现它。 – 2015-04-04 18:35:00
我的歉意,我已经削减了这部分。我有另一个构造函数,我从char []参数动态分配内存。 – user1929613 2015-04-04 18:41:46
无论如何,标记的副本解释了你的'ReadAndLog()'代码有什么问题。而是使用'std :: vector'或任何其他适当的C++标准容器。 – 2015-04-04 18:44:33