メモリリークの大きな問題に遭遇しましたが、その "削除"をどこから削除するかはわかりません。以下は私のコードの一部です。完全なものがあります: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;
}
愚かではありますが、正確な答え:生のダイナミックメモリを使用しないこと。それを必要とするものは一目でわかりません。 – user4581301
C++では 'new'を使わないでください。 –
動的配列をstd :: vectorに置き換えます。それでもポインタが必要な場合は、未処理のポインタをstd :: unique_ptrに置き換えてください。 new/deleteはC++ではほとんど必要とされず、使用する前に考えるべきです。 –