我是C ++的新手,主要是使用Java,而我正在尝试编写一个函数问题。我确信这很简单,但是,它给了我适合,所以准备一个痛苦的新手问题。
我正在尝试编写如下函数:
void foo(u_char *ct){
/* ct is a counter variable,
it must be written this way due to the library
I need to use keeping it as an arbitrary user argument*/
/*here I would just like to convert the u_char to an int,
print and increment it for each call to foo,
the code sample I'm working from attempts to do it more or less as follows:*/
int *counter = (int *) ct;
printf("Count: %d\n", *counter);
*counter++;
return;
}
当我尝试在XCode中运行它时(我也不习惯使用它),我在foo的printf()部分得到一个EXE_BAD_ACCESS异常。我真的不确定这里发生了什么,但我怀疑它与汇总值,指针和引用有关,我还不知道C ++如何理解它们来自Java。有谁看到我在这里滑倒的地方?
感谢。
答案 0 :(得分:4)
u_char
将在内存中为1个字节(名称表明它只是一个无符号字符),int
通常为4个字节。在printf
中,您告诉运行时从int
所在的地址读取counter
(4个字节)。但是你只有1个字节。
答案 1 :(得分:0)
编辑(基于这里的评论,海报说它实际上是用int的地址调用的:foo((u_char*)&count)
):
void foo(u_char *ct)
{
int *pcounter = (int *)ct; // change pointer back to an int *
printf("Count: %d\n", *pcounter);
(*pcounter)++; // <<-- brackets here because of operator precedence.
}
甚至更短(除了新手喜欢这种语言之外的狂野的c风格):
void foo(u_char *ct)
{
printf("Count: %d\n", (*(int *)ct)++);
}