私は動的配列を扱っています。関数empty_matrix()
は、行列を表す新しい配列を作成します。 delete_matrix()
は、行列に割り当てられたすべてのメモリを解放します。C++の配列の正しい割り当てと空きメモリ
私はadd(add(a, b), c)
を呼び出した場合、機能example()
でメモリリークが発生しますか?関数add(...)
に割り当てられたメモリはどうなりますか?私はそれを解放する必要がありますか?私はどこでそれをするべきですか?
matrix empty_matrix(int dim) {
matrix m;
m.dim = dim;
m.data = new int*[dim];
for (int i = 0; i < dim; i++)
m.data[i] = new int[dim];
return m;
}
void delete_matrix(matrix m) {
for (int i = 0; i < dim; i++)
delete [] m.data[i];
delete [] m.data;
}
matrix add(matrix a, matrix b) {
matrix c = empty_matrix(a.dim);
for (int i = 0; i < a.dim; i++)
for (int j = 0; j < a.dim; j++)
c.data[i][j] = a.data[i][j] + b.data[i][j];
return c;
}
void example() {
matrix a = empty_matrix(100);
matrix b = empty_matrix(100);
matrix c = empty_matrix(100);
// some modifications of a, b and c
// ...
matrix d = add(add(a, b), c);
print_matrix(d);
delete_matrix(a);
delete_matrix(b);
delete_matrix(c);
delete_matrix(d);
}
valgrind:http://valgrind.org/のようなツールを使用すると、そこにリークがあることがわかります。 – Marii