c双指针给出没有意义的错误

时间:2011-09-28 00:04:59

标签: c pointers

int p_entity(char **data){
  char *pch;

  pch = strtok(*data, " \n");
  // printf("%s ", pch);
  pch = strtok(NULL, " \n");
  // (*data) = (*data) + 1;   // 1. this is okay
  //  (*data) = pch;          // 2. but doing this will cause an error
  printf("%c %d \n", *pch, pch); 
  printf("%c %d \n", **data, *data);
}

从上面的代码中,如果我取消注释1,我将得到以下内容:

g 4927479
e 4927456

如果我取消注释2,我将得到以下内容:

g 4927479
g 4927479
      3 [main] main 8172 exception::handle: Exception: STATUS_ACCESS_VIOLATION
    470 [main] main 8172 open_stackdumpfile: Dumping stack trace to main.exe.stackdump

任何人都可以解释为什么我会收到这个错误吗?我认为这两项任务都是合法的,而增量(*数据)相当于直接指定我想要的地址。

2 个答案:

答案 0 :(得分:2)

即使你收到错误(并取消注释2)似乎也是如此,你仍然会得到两个printfs ...好像它在你的代码中会崩溃很久。

答案 1 :(得分:0)

答案实际上取决于您在调用此函数之前和之后处理数据的方式。

如果在调用此函数之前将内存分配给*数据并在此函数返回后绑定以释放它,则可能会崩溃,因为您已更改其值。