我的代码中有这样的东西
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)代码,但这很烦人,因为内存分配的顺序(在每个在我可能会出错的地方,我应该编写代码来释放从那时起分配的所有东西)。
不知道是否清楚,希望有人能提供一些帮助:)