**Updated. Sorry to those whose answers no longer make sense.
So I figured out that no matter what I put on the line after Data_pair_node, after it executes, thats when the thing is reset! WTH? :
int insert(Table *t, const char *key, const char *val){
int dest_bucket_index;
Table *table = t;
Hash_bucket *dest_bucket = NULL;
Data_pair_node *current = NULL, *prev = NULL, *new_item = NULL;
printf("gonna be zero now");
Lo and behold:
$23 = (Hash_bucket *) 0x834010
(gdb) step
109 printf("gonna be zero now");
(gdb) print table->buckets
$24 = (Hash_bucket *) 0x0
Thanks Aymon Fournier