在数据结构中释放数组时出错

时间:2016-12-07 04:06:22

标签: data-structures

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;
}

根据调试器,错误来自free(temp-&gt;数据)部分。然而。我第二次通过该功能时才遇到错误。任何想法在这里发生了什么。

我在visual studio上遇到堆损坏错误。

1 个答案:

答案 0 :(得分:0)

我正在编写一些假设,比如你假设int size是32位,你试图将bit_set中的bit设置为bit,你使用1 int for 1 bit来设置和取消设置位

现在几乎没有评论

temp-&gt; data [flag_position / 32] | = 1&lt;&lt; flag_position%32;现在这没有任何意义,这个行的作用是在flag_position设置位,这应该是temp-&gt; data [flag_position] = 1;相反,因为如果你看到你的代码,你的每个位都使用整数。

此行temp-&gt; size = flag_position + 1;也是不正确的,这应该是temp-&gt; size = flag_position;