2017-09-19 44 views
1

ポインタの配列である変数 'arr'の内容を取得する際に問題があります。 私は試しましたが、p *[email protected]ですが、次のような出力があります:$1 = {0x603010, 0x603030}。 どうすればよいですか?gdb - ポインタの配列の内容を表示する方法は?

int n, q; 
scanf("%d %d", &n, &q); 

int lastAnswer=0, index_size[n], *arr[n]; // <-- here 
for(int i=0; i<n; i++) 
    index_size[i] = 0; 

for(int i=0; i<n; i++) { 

    int *temp = malloc(sizeof(int)*n); 
    arr[i] = temp; 
} 

while(q--) { 
    int w, x, y, seq; 
    scanf("%d %d %d", &w, &x, &y); 

    if(w == 1) { 

     seq = ((x^lastAnswer) % n); 
     arr[seq][index_size[seq]++] = y; 
    } 
    else { 

     seq = ((x^lastAnswer) % n); 
     lastAnswer = y%n; 
     printf("%d\n", lastAnswer); 
    } 
} 

return 0; 
+0

かわいいプリンタを書くかもしれませんか?ポインタタイプのものを登録することができます... – o11c

+0

https://stackoverflow.com/questions/14502236/gdb-how-to-view- a-pointer-like-an-array – sailfish009

答えて

0

ポインタ自体をプリントアウトすると、メモリブロックにアドレスが与えられます。あなたはより深い内容を印刷したい場合は

だからprint *[email protected]は、単にあなたの最初の次元のコンテンツ(あなたの出力のアドレスの配列)

を与えるだろう。あなたはこのような何かをしたい場合があります:

print **[email protected]; 

または

print *arr[0]@n 

もう一つの方法は、プログラム内部のきれいな印刷機能を定義し、gdbの中でそれを呼び出すだろう。

void print(int arr[][], n, m) 
{ 
    int i, j; 
    for (i = 0; i < n; ++i) 
    { 
     for (j = 0; j < m; ++j) 
      printf("%d ", arr[i][j]); 
     printf("\n"); 
    } 
} 

そして

call print(arr, n, m) 

によってGDBでそれを呼び出す私は2次元配列自体を印刷gdbのサポートは考えていない、なぜ? print *[email protected]の定義ではなく、それは「*array(又はarray[0])をpritingとarray[0]次の3つの要素が、arrayの最初の3つの要素を印刷されていないため。

print **[email protected]@n 

この場合には機能しません、(

関連する問題