前提・実現したいこと
C言語でmallocを用いて2次元配列を動的に確保したいと思っています.
あるサイトでダブルポインタを用いて2次元配列を実現するソースコードがあったのですが,
mallocでメモリ確保に失敗した場合のエラー処理で,メモリリークしているのではないかと思われる個所がありました.
発生している問題・エラーメッセージ
そこで,以下の2点を確認したく質問いたします.
・メモリリークの有無(該当箇所にコメント付記)
・メモリリークがあれば,その修正方法が正しいか
以上,よろしくお願いいたします.
該当のソースコード
#include <stdio.h> #include <stdlib.h> int main(void) { int n = 10; int m = 10; double **A = (double **) malloc( sizeof(double*) * n ); if ( A == NULL ) { return 1; } for (int i = 0; i < n; i++) { A[i] = (double *) malloc( sizeof(double) * m ); if ( A[i] == NULL ) { for (int j = i-1; j >= 0; j--) { free(A[j]); } // free(A); // ここでもメモリ解放が必要なのではないかと思うのですが..いかかでしょうか? return 1; } for (int j = 0; j < m; j++ ) { A[i][j] = i*j; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { printf("%6.2f ", A[i][j]); } printf("\n"); } for (int i = 0; i < n; i++) { free(A[i]); } free(A); return 0; }
試したこと
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。