我試圖用我自己的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