2016-05-11 17 views
0

ich es geschafft, mein Problem mit diesem Code-Schnipsel zu verengen:Wie void Array von Void-Zeigern zu befreien?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    void **arr; 
    int max = 10; //tr = 0; 
    int size = sizeof(int); 

    arr = malloc(max*sizeof(void*)); 

    for (int i=0; i<=6; i++) 
    { 
     arr[i] = malloc(size); 
     memcpy(arr+i, &i, size); 
    } 

    for (int i=0; i<=6; i++) 
    { 
     printf("%d ", *(int*)(arr + i)); 
    } 

    free(arr[0]); 
    free(arr[1]); 

    free(arr); 
    return 0; 
} 

Es ist okay, wenn ich arr frei, und es ist in Ordnung, wenn ich arr[0] befreien. Aber alles andere als das bekomme ich einen Segfault.

Mache ich die Zuordnungen falsch? Oder ist es etwas anderes?

+2

'niz' nicht angemeldeten sein. Post kompilierbaren Code. – EOF

+0

@EOF Ich habe es repariert, es funktioniert jetzt nicht richtig :) –

Antwort

1

sollte

for (int i=0; i<=6; i++) 
{ 
    arr[i] = malloc(size); 
    memcpy(arr[i], &i, size); 
} 

for (int i=0; i<=6; i++) 
{ 
    printf("%d ", *(int*)(arr[i])); 
} 
+0

Ja, fantastisch! Kannst du mir bitte sagen, was ich zuerst mit meinem Beispiel gemacht habe? –

+2

@smrdo_prdo Sie haben in eine unbeabsichtigte Erinnerung geschrieben. du willst '* (arr + i)', nicht 'arr + i'. '(arr + i)' ist 'arr [i]'. – BLUEPIXY