2016-12-07 2 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; 
} 

entsprechend dem Debugger ist der Fehler von der freien (temp-> Daten) Teil. jedoch. Ich laufe nur beim zweiten Mal, wenn ich die Funktion durchführe, auf den Fehler. irgendwelche Ideen, was hier passiert.Fehler beim Freigeben eines Arrays innerhalb einer Datenstruktur

bekomme ich einen Haufen Korruption Fehler auf Visual Studio.

Antwort

0

ich auf einigen Annahmen schreibe wie Sie int size davon aus 32 Bits ist und Sie versuchen, das Bit an flag_position im bitset zu setzen und Sie sind mit 1 int für 1 Bit für die Einstellung und Entschärfen Bits

Einige Kommentare jetzt

temp-> daten [flag_position/32] | = 1 < < flag_position% 32; jetzt macht das keinen Sinn, diese Zeilenrolle ist das Setzen des Bits bei flag_position, dies sollte temp-> data [flag_position] = 1 sein; Stattdessen, denn wenn Sie Ihren Code sehen, verwenden Sie Ints für jedes Bit.

Auch diese Zeile temp-> size = flag_position + 1; ist auch falsch, das sollte temp sein-> size = flag_position;

+0

ich könnte falsch liegen, weil ich nicht den ganzen Code und die Implementierung von Datenstrukturen gesehen habe, also wenn Sie den Code teilen können wir sehen, was das Problem genau ist. –

Verwandte Themen