我遇到了内存泄漏的巨大问题,而且我不知道在哪里放置该“删除”以消除它们。以下是我的代码的一部分,其中有完整的代码: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++良好实践。