我使用下面的代码来释放malloc
结构中的meshes
ed内存,它包含triangleArrays
和faces
。
这会崩溃,因为并非struct
中的每个位置都有数据。我只想在free
包含数组中该成员的数据时调用struct
。但是使用if (self.meshes[meshIdx].triangleArrays[triangleArrayIdx].faces !=NULL)
似乎不起作用。
for (int meshIdx = 0; meshIdx <=meshTriangleArrays; meshIdx ++) {
for (int triangleArrayIdx = 0; triangleArrayIdx <=1; triangleArrayIdx ++) {
if (self.meshes[meshIdx].triangleArrays[triangleArrayIdx].faces !=NULL) {
free(self.meshes[meshIdx].triangleArrays[triangleArrayIdx].faces);
}
}
}
最佳答案
对空指针调用free
实际上是可以的。
您没有提供足够的代码来完全诊断此问题,但需要注意以下几点:
您需要确保self.meshes[...].triangleArrays[...].faces
始终是初始化的,可以通过调用malloc
(或其他方式)或将其设置为NULL
。否则,它可能(而且很可能)是一个您没有free
权限的随机垃圾指针。
您需要确保所有不同的self.meshes[...].triangleArrays[...].faces
指针都是不同的指针。您只允许在一个指针上调用一次free
。例如,如下所示:int*p=(int*)malloc(sizeof(int));
自由(p);
free(p);//未定义的行为
会导致撞车。