C双指针分配问题

时间:2012-11-15 17:05:51

标签: c pointers segmentation-fault

我读了大量的tutos和片段,但我仍然不明白为什么我会因此而遇到一个段错误:

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)

我看过很多类似的片段,但肯定有一些我非常误解。

2 个答案:

答案 0 :(得分:4)

你的意思是(*p)[1]。你所说的是*(p[1])

答案 1 :(得分:0)

尝试在LHS返回变量的相同数据类型的地址。 malloc()默认返回void值。 p =(char )malloc(2); 这样编译器知道将指针移动到获取新变量的字节数。