コードにこのようなものがあります
typedef struct ts_fem_mesh
{
double **vertices;
unsigned int **triangles;
unsigned int n_ver;
unsigned int n_tri;
} fem_mesh;
fem_mesh *fem_mesh_new(unsigned int n_ver, unsigned int n_tri)
{
fem_mesh *mesh;
mesh = (fem_mesh *)malloc(sizeof(fem_mesh));
mesh->n_ver = n_ver;
mesh->n_tri = n_tri;
mesh->vertices = (double **)calloc(n_ver, sizeof(double *));
mesh->triangles = (unsigned int **)calloc(n_tri, sizeof(unsigned int *));
int i;
for(i=0;i<n_ver;i++)
mesh->vertices[i] = (double *)calloc(2, sizeof(double));
for(i=0;i<n_tri;i++)
mesh->triangles[i] = (unsigned int *)calloc(3, sizeof(unsigned int));
return mesh;
}
通常、 を呼び出すとき、とfem_mesh_new
に非常に大きな数を使用するため、割り当てエラー (十分なスペースがありません) が発生することがあります。n_ver
n_tri
この種のエラーが発生した場合でも、プログラムはユーザーにアドバイスし、実行に従う必要があります。この場合、エラー ポイント以降に割り当てたすべてのものを解放したい (つまり、割り当てようとするとエラーが発生するmesh->triangles
が、mesh->vertices
割り当てられているので、解放したいmesh->vertices
)
それを行う簡単な方法はありますか?私が考えることができる唯一の方法 (これは避けたい方法です) は、多くのif (x==NULL)のコードをいっぱいにすることですが、これはメモリが割り当てられる順序のために非常に面倒です (すべてのエラーが発生する可能性があるポイントでは、そのポイント以降に割り当てられたすべてのものを解放するコードを作成する必要があります)。
明確かどうかわかりませんが、誰かが助けてくれることを願っています:)