在哪里删除返回的字符*

Where to delete returned char*

我有一个作业要实现一个公牛和奶牛的游戏class,我们的导师给了我们一个header我们必须实现它,里面有这个功能

char* TryToGuess(int);

它的作用是接收一个 int 并且必须 return 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";

问题是有内存泄漏,我不知道把delete[]放在哪里,它不能在循环内,因为while中的条件不满足。预先感谢您的帮助。

PS: 我不能把return类型改成字符串,我的导师已经这样设置了。

PS2:这是完整的 header

#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_

每次使用循环后,您都需要 delete result[]。否则,您将在下次分配给变量时泄漏该内存。但这也意味着你不能在 while 子句中使用 result,因为它已经被删除了。你必须在循环中测试它。

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.