2

たくさんのtutoとスニペットを読みましたが、なぜこれでセグメンテーション違反が発生するのかまだわかりません。

int fun(char **p) {

  int i;

  *p = malloc(2);
  *p[0]=10;
  *p[1]=20; // segfault NULL pointer

  printf("fun()/n");
  for (i=0; i<2; i++)
   printf("%d ",*p[i]);
}

int main(int argc, const char *argv[])
{
  char* buffer;
  int i;

  fun(&buffer);

  printf("main()\n");

  for (i=0; i<2; i++)
   printf("%d ",buffer[i]);

  return 0;
}

gdbでは、次のようになります。

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000
0x0000000100000dea in fun (p=0x7fff5fbffab0) at test.c:10
10    *p[1]=20;
(gdb) p *p[0]
$1 = 10 '\n'
(gdb) p *p[1]
Cannot access memory at address 0x0
(gdb)

似たようなスニペットをたくさん見ましたが、確かに私が深く誤解していることがあります。

4

2 に答える 2

4

つまり(*p)[1]。あなたが言ったことはです*(p[1])

于 2012-11-15T17:08:02.953 に答える