#include #include /* Does NOT cause memory error */ typedef struct __attribute__((__packed__)) { unsigned short chr; unsigned int loc; } GENOME_LOC_TYPE_2; /* Causes memory error */ typedef struct __attribute__((__packed__)) { unsigned chr :16; unsigned loc :32; } GENOME_LOC_TYPE; void print_mapped_location( GENOME_LOC_TYPE loc ) { printf( "%i\n", loc.loc ); } int main( int argc, char* argv ) { char* data; data = malloc(12*sizeof(char)); GENOME_LOC_TYPE* gen_array = (GENOME_LOC_TYPE*) data; gen_array[0].loc = 0; gen_array[1].loc = 1; /* Make sure the structure is actually 6 bytes */ printf("Gen Loc Type Size: %zu\n", sizeof(GENOME_LOC_TYPE) ); /* Works fine. */ printf( "%i\n", gen_array[1].loc ); /* Works fine */ GENOME_LOC_TYPE loc = gen_array[1]; print_mapped_location( loc ); /* Causes valgrind error */ /* Cause -lefence segfault */ print_mapped_location( gen_array[1] ); free( data ); }