簡體   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