我正在使用下面的代码释放 meshes
结构中的 malloc
ed 内存,该结构包含 triangleArrays
和 faces
。
这会崩溃,因为并非 struct
中的每个位置都有数据。如果 struct
包含数组成员中的数据,我只想调用 free
。但是使用 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
指针都是不同 指针。您只能在malloc
指针上调用一次free
。例如,像这样:int * p = (int *) malloc(sizeof(int)); free(p); free(p); // undefined behavior
可能导致崩溃。
关于c - 在尝试释放()之前确定结构成员是否具有有效数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8525680/