【发布时间】:2012-11-18 05:21:36
【问题描述】:
所以我有一个方法可以返回一个无符号字符 *
unsigned char* someMethod(num)
unsigned short num;
{
//do some stuff with num and change values of a
unsigned char * a = (unsigned char*) malloc(4);
printf("a0 is %x\n",a[0]);
printf("a1 is %x\n",a[1]);
printf("a2 is %x\n",a[2]);
printf("a3 is %x\n",a[3]);
return a;
}
当我调用 someMethod(128) 时:
unsigned char* s = someMethod(128);
printf("s0 is %x\n",s[0]);
printf("s1 is %x\n",s[1]);
printf("s2 is %x\n",s[2]);
printf("s3 is %x\n",s[3]);
它会打印出来
a0 is 30
a1 is 1
a2 is 31
a3 is 30
s0 is 30
s1 is 14
s2 is ffffff9d
s3 is 0
这对我来说毫无意义,因为我分配了 s = someMethod(128)。 a 和 s 不应该具有相同的值吗?!? 任何帮助表示赞赏。谢谢!
【问题讨论】:
-
K&R 风格的函数定义?这段代码有多少年了?
-
我怀疑你没有
#includedstdlib.h,所以假设返回类型是int。除此之外,%x是unsigned char的错误格式(尽管在这种情况下,它可能会起作用)。 -
你能重现所发布的函数的问题吗? (函数看起来很简化,可能漏掉了实际问题)
-
如果您的问题是您缺少
malloc()的原型,正如 Daniel Fischer 所建议的那样,那就让这成为有关转换malloc()的结果的教训(在 C 中,您不应该这样做)。 -
@gl3829:更好:
unsigned char *a = malloc(4 * sizeof *a);。强制转换是不必要的(void*结果被隐式转换为适当的类型)并且在某些情况下可以掩盖错误。使用sizeof *a而不是sizeof (unsigned char)使代码更易于维护;如果a的类型发生变化,您不需要更改两件事。
标签: c unsigned-char