我有一種特殊結構的動態分配的載體,我想免費的,但軟件老是死機免費結構
結構是:
typedef struct {
Type_e type;
union {
char m_char;
int m_int;
// more types (non of them is a pointer)
} my_data;
} Data_t;
其中Type是一個枚舉包含所有可能的數據類型。
我分配和初始化向量如下
void vector(Data_t **vec, UInt32_t start_element, UInt32_t end_element, Type_e type)
{
UInt32_t i;
Data_t *vec_ptr;
*vec=(Data_t *)malloc((size_t) ((end_element-start_element+1) * sizeof(Data_t)));
vec_ptr = *vec;
if (!vec_ptr)
{
// Write error
}
for (i =start_element; i <= end_element + 1; i++)
{
vec_ptr->type = type;
switch (type)
{
case UINT32: vec_ptr->my_data.m_int = 0; break;
// more possible cases
default:
break;
}
(vec_ptr)++;
}
}
我調用該函數如下
Data_t *lVector = NULL;
vector(&lVector,0,10,INT32)
但是當我嘗試釋放分配的內存如下,
free (lVector+start_element-1);
我試過
free (lVector+start_element);
和
free (lVector);
是START_ELEMENT = 0(在這種情況下)
但在所有情況下,它會崩潰。我做錯了什麼?
標準警告:不要像'malloc'和朋友那樣強制轉換'void *'。 – Olaf
給定分配'vec'的發佈方法,使用'free(vec);'釋放它。 (或者如果在調用者free'd,使用'免費(lvector);' – user3629249