[英]Freeing void pointer causes 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]);
我得到一个段错误...
我认为它释放了太多 memory,因为段错误不是来自free
的 function,它来自glfwSwapBuffers
,但只有在调用这个特定的free
之后 - 当我之前溢出缓冲区时发生了类似的事情,这就是我认为的原因释放太多 memory。 问题是为什么?
段错误与free
或损坏的 memory 完全无关:我试图在调用free
后立即访问指针......我使用 Valgrind 解决了这个问题,正如评论者所建议的那样。 直到今天我才真正知道 Valgrind 的存在,这真的很有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.