释放空指针会导致segfault



当我释放一个void指针时,我得到了一个segfault。。。

我正在尝试制作一个动态的通用数组,在我的游戏中存储敌人:

typedef struct EnemyPool {
void** elements;
unsigned int element_count;
unsigned int element_capacity;
unsigned int element_size;
} EnemyPool;

这是一个空指针数组。

我创建这样的数组:

pool->elements = malloc(pool->element_capacity * sizeof(void*));

更新如下:

pool->element_capacity *= 2;
pool->elements = realloc(pool->elements, pool->element_capacity * sizeof(void*));

我创建了这样的新元素:

pool->elements[new_idx] = malloc(pool->element_size);

pool->element_size是正确的,它只是这个数组存储的元素类型的sizeof。。。

为什么,当我这样做的时候:

free(pool->elements[0]);

我得了一个segfault。。。

我认为它释放了太多内存,因为segfault不是来自free函数,而是来自glfwSwapBuffers,但只是在调用了这个特定的free之后——之前我溢出缓冲区时也发生了类似的事情,这就是为什么我认为它会释放太多内存。问题是为什么?

segfault与free或损坏的内存完全无关:我在调用了指针上的free之后就试图访问它……正如一位评论者所建议的,我使用Valgrind解决了这个问题。直到今天,我才真正知道Valgrind的存在,这真的很有帮助。

最新更新