2016-12-07 67 views
0
Status bit_flags_set_flag(BIT_FLAGS hBit_flags, int flag_position) { 

Bit_Flags* temp = (Bit_Flags*)hBit_flags; 
int* nums; 
int i; 
int old_size; 



if (temp->size < flag_position) { 
    nums = malloc(sizeof(int)*flag_position+1); 
    if (nums == NULL) { 

     return FAILURE; 
    } 

    for (i = 0; i < temp->size; i++) { 

     nums[i] = temp->data[i]; 
    } 

    free(temp->data); 

    temp->data = nums; 

    old_size = temp->size; 

    temp->size = flag_position + 1; 


    for (i = old_size; i < temp->size; i++) { 
     temp->data[i] = 0; 
    } 

} 

temp->data[flag_position/32] |= 1 << flag_position % 32; 

return SUCCESS; 
} 

根據調試器,錯誤來自空閒(temp-> data)部分。然而。第二次通過函數時,我只會遇到錯誤。任何想法發生在這裏。在數據結構中釋放陣列時出錯

在Visual Studio上得到堆損壞錯誤。

回答

0

我寫的一些假設像我們假定你是INT大小爲32位,您要定了位在位集flag_position和你正在使用1 INT 1位設置和取消位

現在幾乎沒有評論

temp-> data [flag_position/32] | = 1 < < flag_position%32;現在這沒有任何意義,這一行的作用是設置位在flag_position,這應該是temp-> data [flag_position] = 1;相反,因爲如果你看到你的代碼,你使用的是每一位的整數。

另外這行temp-> size = flag_position + 1;也是不正確的,這應該是temp-> size = flag_position;

+0

我可能是錯的,因爲我沒有看到整個代碼和數據結構的實現,所以如果你能分享代碼,我們可以看到完全一樣的問題。 –