我有一个家庭作业来实施公牛和奶牛比赛课程,我们的导师给了我们一个标题,我们必须实现它,其中有这个功能
char* TryToGuess(int);
它的作用是接收一个int并且必须返回char *,其中包含您猜测的公牛和母牛的数量。我所做的是创建一个字符串,传递其中的所有信息,然后将其转换为char *,如下所示:
string result = "Cows:";
char c = char(cows + '0');
result += c;
result += " Bulls:";
char b = char(bulls + '0');
result += b;
char* finalResult = new char[18];
strcpy(finalResult, result.c_str());
return finalResult;
我们还有一个名为start的函数,我们执行游戏,我的代码是
char* result;
int guess;
do
{
cout << "Your guess:";
cin >> guess;
result = TryToGuess(guess);
cout << "\t\t\t[" << guess << "] => " << result << endl;
} while (result != "Congarulations! You made a right guess!");
cout << "\n\n\t\t It took you " << numberOfGuesses << " guesses to finish the game.\n";
问题是存在内存泄漏,我不知道删除[]的位置,它不能在循环内部,因为它的条件不会被满足。在此先感谢您的帮助。
PS:我无法将返回类型更改为字符串,我的导师已将其设置为。
PS2:这里是完整标题
#ifndef BULLSANDCOWS_H_
#define BULLSANDCOWS_H_
class BullsAndCows
{
public:
BullsAndCows(int = 4);
BullsAndCows(int[], int);
void SetContainerSize(int);
void SetContainer(int*);
bool IsInsideContainer(int);
bool CowElement(int*, int, int);
bool BullElement(int*, int, int);
char* TryToGuess(int);
void start();
// void print();
private:
int sizeOfContainer;
int* numbersContainer;
int numberOfGuesses;
};
#endif // BULLSANDCOWS_H_
答案 0 :(得分:0)
在您完成使用后,每次循环都需要delete result[]
。否则,下次分配给变量时,您将泄漏该内存。但这也意味着您无法在result
子句中使用while
,因为它已被删除。你必须在循环内测试这个。
bool done = false;
do
{
cout << "Your guess:";
cin >> guess;
result = TryToGuess(guess);
cout << "\t\t\t[" << guess << "] => " << result << endl;
done = strcmp(result, "Congarulations! You made a right guess!") == 0;
delete result[];
} while (!done);
另请注意,您不必使用==
来比较C字符串(它将比较指针值,而不是字符串的内容),您必须使用strcmp
。