M
Martin
The following compiles cleanly on gcc3.0.4 using -W -Wall -ansi -
pedantic. Lint gives this warning:
_
p_member_09 = p_start + OFFSET_TO_MEMBER_09;
t_offset.c 27 Warning 416: creation of out-of-bounds pointer (33
beyond end of data) by operator ptr+int' [Reference: file t_offset.c:
lines 26, 27]
The underscore Lint uses to indicate the point of warning is over the
'O' in OFFSET_TO_MEMBER_09.
My question is this. Is the technique used here well-defined and safe
practice?
typedef unsigned char uchar;
struct byte_array {
uchar member_01;
uchar member_02[8];
uchar member_03[2];
uchar member_04[2];
uchar member_05[8];
uchar member_06[2];
uchar member_07[2];
uchar member_08[8];
uchar member_09[2];
uchar member_10[2];
};
struct byte_array byte_array;
#define OFFSET_TO_MEMBER_06 21
#define OFFSET_TO_MEMBER_09 33
int main( void )
{
uchar *p_start;
uchar *p_member_09;
p_start = &byte_array.member_01;
p_member_09 = p_start + OFFSET_TO_MEMBER_09;
return 0;
}
pedantic. Lint gives this warning:
_
p_member_09 = p_start + OFFSET_TO_MEMBER_09;
t_offset.c 27 Warning 416: creation of out-of-bounds pointer (33
beyond end of data) by operator ptr+int' [Reference: file t_offset.c:
lines 26, 27]
The underscore Lint uses to indicate the point of warning is over the
'O' in OFFSET_TO_MEMBER_09.
My question is this. Is the technique used here well-defined and safe
practice?
typedef unsigned char uchar;
struct byte_array {
uchar member_01;
uchar member_02[8];
uchar member_03[2];
uchar member_04[2];
uchar member_05[8];
uchar member_06[2];
uchar member_07[2];
uchar member_08[8];
uchar member_09[2];
uchar member_10[2];
};
struct byte_array byte_array;
#define OFFSET_TO_MEMBER_06 21
#define OFFSET_TO_MEMBER_09 33
int main( void )
{
uchar *p_start;
uchar *p_member_09;
p_start = &byte_array.member_01;
p_member_09 = p_start + OFFSET_TO_MEMBER_09;
return 0;
}