今天碰到一个棘手的问题,调用一个别人的函数的时候总是会出现 segment fault错误。这个应该是下标越界的问题,但是看了半天都看不出问题在哪里。
后来发现是 在强制转换中发生的问题。原来的函数有一个参数x为int 型,有32位。这个参数在函数中被使用做过数组下标。
在我调用的时候只需要使用8位就可以了。于是我定义了
typedef char BYTE.
然后在调的时候我将BYTE参数用(int)强转为int型呢。
在gcc中 char默认为 signed char,所以强转之后的int变成了负数。造成数组下标越界错误。
将上面的BYTE的定义改为
typedef unsigned char BYTE之后就好了。 这样就可以保证为正数.
