Dirk is totally correct.
Another way to express this, is that there is no space allocated to put retrieved data in.
try:
int_in = 55;
void* int_out = malloc (sizeof (int_in));
store ( storage_int, &int_in, sizeof(int));
retrieve ( int_out, storage_int, sizeof(int));
assert ( 55 == *(int*)int_out);
Of course, you may want to use something other than malloc(), and there is no check to see if malloc() failed, but this should get you on the right track.