繁体   English   中英

释放 void 指针会导致段错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM