A. C++の場合

C++の場合は、色々便利な線型演算用のクラス・ライブラリィがあるので、 そういうものを使えば良いと思うが、 C++ は基本的に C の上位互換なので、 上で説明しているやり方は C++ でも使える。

ただし C++ では、メモリの割り当てと解放は (C のように malloc(), free() を使うのでなく)、 newdelete を使うのが普通なので、 それらを使うように書き直しておく。

(NULL でなく、nullptr とすべきなのかな?)
C++ 版 new_matrix()
#include <iostream>
using namespace std;

typedef double *vector;
typedef vector *matrix; // matrix って行列という意味です。

matrix new_matrix(int m, int n)
{
  matrix a = new vector [m];
  if (a == NULL) {
    return NULL;
  }
  vector ap = new double [m*n];
  if (ap == NULL) {
    delete [] a;
    return NULL;
  }
  for (int i = 0; i < m; i++)
    a[i] = ap + i * n;
  return a;
}

void delete_matrix(matrix a)
{
  delete [] a[0];
  delete [] a;
}

桂田 祐史
2017-03-06