2016-03-23 20 views
-2

私はこのように、**無効内部void *型のメモリアドレスを印刷しようとしています:私は警告やエラーを取得するコンパイルしようとするとvoid **のメモリアドレスはどのように表示されますか?

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

int main(){ 

    void** MyArray = malloc(500 * sizeof(void*)); 
    printf("Last pointer: %p\n", *MyArray[499]); 
    free(MyArray); 
    return 0; 

} 

しかし:

  1. Line: 6 Col: 31 in D:\C\test.c [Warning] dereferencing 'void *' pointer
  2. Line: 6 Col: 2 in D:\C\test.c [Error] invalid use of void expression

私は何を間違ってる?ありがとう

+3

'* MyArray [499]'は 'MyArray [499]'にする必要があります。 –

+0

MyArrayは初期化されていますが、メンバーは初期化されていません。つまり、初期化されていない変数、つまりゴミを印刷します。構文エラーを除いて。 –

答えて

1

空のポインタの束を保持するために配列を保持するためにメモリを割り当てます。この配列にはまだポインタは含まれていません。配列の最後の位置のアドレスが必要な場合は、次のようにしてください。

int main(){ 
    void** MyArray = malloc(500 * sizeof(void*)); 
    printf("Last pointer is located at: %p\n", (void *)&(MyArray[499])); 
    free(MyArray); 
    return 0; 

} 
関連する問題