// STRSTRREV (strstrの逆)
//**********************************************************
static char *STRREV;

char *STRSTRREV(char *s1, char *s2)
{
char *p, *wk;
int i, len;
p = strstr(s1,s2);
len = (p - s1);

wk = malloc(len+1);
if(wk==NULL) return 0;

for(i=0; i<len+1; ++i) wk[i] = 0;

for(i=0; i<len; ++i) wk[i] = *(s1+i);

STRREV = wk;
free(wk);
return STRREV;
}

free(wk)で落ちてしまう。のでデーターが帰ってこない。
//free(wk); (コメント)にしたら問題なく動作するのですが、
free()で落ちる原因って何ですか?

コンパイラーはgcc-3.2.2-5