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
任何人都可以解释为什么我会收到这个错误吗?我认为这两项任务都是合法的,而增量(*数据)相当于直接指定我想要的地址。
答案 0 :(得分:2)
即使你收到错误(并取消注释2)似乎也是如此,你仍然会得到两个printfs ...好像它在你的代码中会崩溃很久。
答案 1 :(得分:0)
答案实际上取决于您在调用此函数之前和之后处理数据的方式。
如果在调用此函数之前将内存分配给*数据并在此函数返回后绑定以释放它,则可能会崩溃,因为您已更改其值。