In the code below something odd happens when it is called with:
merge (a[], lledge=13, lredge=15, lcedge=16, rcedge=17, rledge=18,
rredge=19)
I will post the gdb output to show the behaviour:
Breakpoint 2, merge (a=0xbffff24c, lledge=13, lredge=15, lcedge=16,
rcedge=17, rledge=18, rredge=19) at ex8.11.c:91
91 for(lri = rmid + 1; lri > rledge; lri--)
(gdb) p rmid
$1 = 18
(gdb) s
92 aux[lri - 1] = a[lri - 1];
(gdb) p rmid
$2 = 18
(gdb) s
91 for(lri = rmid + 1; lri > rledge; lri--)
(gdb) p rmid
$3 = 18
(gdb) s
93 for(rrj = rmid; rrj < rredge; rrj++)
(gdb) p rmid
$4 = 18
(gdb) s
94 aux[rredge + rmid - rrj] = a[rrj + 1];
(gdb) p rmid
$5 = 18
(gdb) s
93 for(rrj = rmid; rrj < rredge; rrj++)
(gdb) p rmid
$6 = 10 <-------------- here I don't understand. There was no
computation with rmid and it changed strangely to 10.
A piece of the function I think you could help me:
void merge(int a[], int lledge, int lredge, int lcedge, int rcedge,
int rledge, int rredge)
{
int aux[N - 1], lmid, cmid, rmid, k;
int lli, lrj, lci, rcj, lri, rrj;
int minor;
char letter;
struct attempt {
int min;
char let; };
struct attempt lattempt1, cattempt2, rattempt3;
struct attempt *lattempt, *cattempt, *rattempt;
lattempt = &lattempt1;
cattempt = &cattempt2;
rattempt = &rattempt3;
lmid = (lledge + lredge) / 2;
cmid = (lcedge + rcedge) / 2;
rmid = (rledge + rredge) / 2;
for(lli = lmid + 1; lli > lledge; lli--)
aux[lli - 1] = a[lli - 1];
for(lrj = lmid; lrj < lredge; lrj++)
aux[lredge + lmid - lrj] = a[lrj + 1];
for(lci = cmid + 1; lci > lcedge; lci--)
aux[lci - 1] = a[lci - 1];
for(rcj = cmid; rcj < rcedge; rcj++)
aux[rcedge + cmid - rcj] = a[rcj + 1];
for(lri = rmid + 1; lri > rledge; lri--)
aux[lri - 1] = a[lri - 1];
for(rrj = rmid; rrj < rredge; rrj++)
aux[rredge + rmid - rrj] = a[rrj + 1];
for(k = lledge; k <= rredge; k++) {
...
Thanks in advance!