2016-05-11 5 views
0

私はこのコードスニペットに私の問題を狭めるために管理:voidポインタの空配列を解放するには?

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

私はarrを解放したときにそれは大丈夫だ、と私はarr[0]を解放するとき、それは大丈夫です。しかし、それ以外のものはセグメンテーションがあります。

割り当てを間違っていますか?それとも別のことですか?

+2

'niz'宣言されていないはずです。コンパイル可能なコードを投稿します。 – EOF

+0

@ EOF私はそれを修正しました、今は正しく動作していません:) –

答えて

1

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

はい、素晴らしいです!あなたは私が最初に何をしていたか教えてもらえますか? –

+2

@smrdo_prdoあなたは意図しないメモリに書き込んでいました。 'arr + i 'ではなく' *(arr + i) 'が必要です。 '*(arr + i)'は 'arr [i]'です。 – BLUEPIXY

関連する問題