私はC++を初めて使用しています。メモリリークの問題があります。私のプログラムの構造は、以下に示すように非常に単純ですが、問題に無関係な部分は除外しています。関数が返す配列を削除する方法
int** foo(int sizeOfArray){
int** arrayToReturn = new int*[sizeOfArray];
for (int i = 0; i < sizeOfArray; i++) {
arrayToReturn[i] = new int[2];
}
return arrayToReturn;
}
int main() {
a = someNumber; // 'a' can be any value (< 64)
int** someArray = foo(int a);
// Do stuff with someArray
}
本質的に、それは配列の配列を返す関数を呼び出します。私の問題は、私のプログラムがこの関数を何千回も呼び出すと、NEWを使用しているので、deleteを使う必要があるのでメモリリークが発生するということです。私は、メイン関数でそれらを使用する必要があるので、配列を削除する方法がわからないので、関数foo内でそれらを削除することはできませんが、後でそれらを削除するにはどうすればいいですか?私はちょうどsomeArray
を削除しようとしましたが、arrayToReturn[i] = new int[2]
行から使用されたメモリは決して解放されません。
うまくいけば、それは愚かな質問であり、読んでいただければ幸いです。
生ポインタを使用しないで、 'std :: unique_ptr'のようなC++ポインタクラスを使用してください。さらに、それがあなたが実際に撮影しているものであれば、std :: vector>を使うのではなく、自分自身で行うよりもはるかに良いでしょう –
pat
vectorまたはunique_ptrのどちらも使用したことはありません。一度スコープ外に割り当てを解除しますか?彼らは使い方を学ぶのは簡単ですか?そして、私は生のポインタで欲しいものを達成する方法がないのですか? –
@MatthewFennellどちらも手作業によるメモリ管理を学ぶより簡単です。 – user2079303