0
我有一个GLOBE结构,其中包含地球上每个经纬度单元的几个参数。 我有一个三重指针如下:指向结构的免费3D指针
data->map = (struct GLOBE ***)malloc_2d(NROWS, NCOL, sizeof(struct GLOBE *));
struct GLOBE {
double *var;
};
其中malloc_2d是一个自定义函数来分配下面定义的2D阵列。地图可以遍历所有的GLOBE。
void** malloc_2d (size_t nrows, size_t ncols, int elementsize) {
size_t i;
void ** ptr;
if ((ptr = (void**)malloc(nrows * sizeof(void *))) == NULL) {
fprintf(stderr, "malloc_2d: out of memory\n");
exit(1);
}
if ((ptr[0] = malloc(nrows * ncols * elementsize)) == NULL) {
fprintf(stderr, "malloc_2d: out of memory\n");
exit(1);
}
for (i=1; i<nrows; i++)
ptr[i] = (char*)ptr[0] + i * ncols * elementsize;
return ptr;
}
GLOBE具有其它动态分配的一维和二维阵列(例如双*变量)。所以当我不得不释放每个GLOBE中的所有GLOBE和动态分配的内存时,我遇到了错误。
具体来说,我尝试:
for(size_t i = 0; i < data->n_lat; i++)
for(size_t i = 0; i < data->n_lat; i++) {
free(data->map[i][j]->var);
free(data->map);
然而,这似乎并没有工作。我应该改变什么? 谢谢!
您需要在此发布更多代码,包括'GLOBE'结构的定义和'malloc_2d'数组的实现。你的代码......“感觉很奇怪”...... – lerosQ
修改后的代码包含malloc_2d和GLOBE的定义 – user308827