我遇到了内存泄漏的巨大问题,而且我不知道在哪里放置该“删除”以消除它们。以下是我的代码的一部分,其中有完整的代码:https://pastebin.com/Wtk83nuH

string* startowa(int& rozmiar)
{
rozmiar = 5;
string* tablica = new string[rozmiar];

for (int i = 0; i < rozmiar; i++)
    tablica[i] = "text";
return tablica;
}

string* plusx(string* tab, int& rozmiar)
{
string tekst = "something";
string* tablica_3 = new string[rozmiar];
tablica_3[rozmiar - 1] = tekst;
for (int i = 0; i<rozmiar - 1; i++)
    tablica_3[i] = tab[i];

return tablica_3;
}

string* minusx(string* tab, int& rozmiar)
{
string* tablica_3 = new string[rozmiar];
for (int i = 0; i < rozmiar; i++)
    tablica_3[i] = tab[i];

return tablica_3;
}

int main()
{
int wybor = 1, rozmiar = 1;
string *tablica = startowa(rozmiar);

while (wybor != 55) {
    cin >> wybor;
    if (wybor == 1) {
        rozmiar++;
        tablica = plusx(tablica, rozmiar);
    }
    if (wybor == 6) wybor = 55;
    else {
        rozmiar--;
        tablica = minusx(tablica, rozmiar);
    }
    // there were other "ifs" but its just a part of the code
}
for (int i = 0; i < rozmiar; i++)
    cout << tablica[i] << endl;

delete[] tablica;
cin >> wybor;

getchar();

return 0;
}

最佳答案

内存泄漏是您在该源代码中遇到的最少问题。实际上,您的示例中根本不需要堆分配。

以下是一些快速改进:
-使用“std::string”而不是字符串,我猜您正在使用“使用命名空间std”
-不要返回指向字符串的指针,您可以声明一个字符串并返回它
-如果不返回int,请勿将其用作函数参数
-尽可能多地使用const
-如果不返回,请用“const string&”替换“string *”
-不要在堆上分配字符串(使用new),而是在堆栈上声明它
-使用载体

您可以将great site和Scott Meyers的书用于其他C++良好实践。

07-28 01:27
查看更多