The problem with the question code is that new nodes are built on the stack.
(As indicated by 'Brett Hale')
re_ar a_n;
re_ar v_n;
Being that a_n and v_n are 'automatic' stack variables, their scope (and existence) is limited to the function in which they reside. When the csr() function returns, the memory occupied by a_n and v_n will be used by other stack structures.
Perhaps it would be appropriate to allocate storage for the new nodes on the heap; something like this:
re_ar *a_n = NULL;
re_ar *v_n = NULL;
a_n=malloc(sizeof(*a_n));
if(NULL == a_n)
/* Handle malloc() failure here. */;
v_n=malloc(sizeof(*a_n));
if(NULL == v_n)
/* Handle malloc() failure here. */;
a_n->nxt = NULL;
v_n->nxt = NULL;
a_n->x = d;
v_n->x = c_i;
...
Then, the new list nodes will persist beyond the life of csr().