Hi, I try to marshal a unsigned int and a char * into a buffer, and then unmarshal them later to get them out. I need to put the char * in the front and unsigned int at the end of the buffer. However, my system always give me "BUS ERROR". I am using Sun Sparcs Sloris 2.10.
My code to marshal the data:
unsigned dev = 111;
unsigned inode = 222;
int s_docname = strlen(docname) + 1;
int s_key = s_docname + sizeof(unsigned) * 2;
My code to unmarshal the data:
char * docname = (char )key.data;
int s_docname = strlen(docname) + 1;
dev =((unsigned *)((char *)key.data + s_docname));
inode = *((unsigned *)((char *)key.data + s_docname +
sizeof(unsigned)));
I can print the dev and inode out in dbx debugger by typing the same
code, but running the program always have the BUS error.
I realize this is a problems of memory alignement. s_docname has byte granularity, somehow I need to "round up" my s_docname by some suitable calculation. But I really don't know how to? Help is appreciated.
Still I got same bus error. The problem is that the dev is not at the address where keybuff + s_docname is
Some processors are not able to load an integer, unsigned etc, from an address which is not a multiple of the size of that integer. For 4-byte integers, the address it is loaded from, looking at the lowest two bit only, must be 00. It is called 4-byte alignment.
I need to "round up" my s_docname by some suitable calculation, leaving what is called 'padding' between docname and dev.
I need some advice on how to round this up. Thanks a lot.