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