删除返回的字符*

时间:2015-04-08 16:56:14

标签: c++ arrays char return

我有一个家庭作业来实施公牛和奶牛比赛课程,我们的导师给了我们一个标题,我们必须实现它,其中有这个功能

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_

1 个答案:

答案 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