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上遇到堆损坏错误。
答案 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;