>
> if ( !str_cmp( word, "Skill" ) || !str_cmp(word,"Sk") )
> {
> int sn;
> int value = fread_number( fp );
> char *temp = fread_word( fp );
>
> sn = skill_lookup(temp);
>
> if ( sn < 0 )
> {
> sprintf(buf, "Fread_char: unknown skill - %s",temp);
> bug( buf, 0 );
> }
> else
> ch->pcdata->learned[sn] = value;
>
> free_string(temp);
> fMatch = TRUE;
> }
>
>
Your using fread_word there. fread_word does -NOT- allocate memory. So
you have nothing to free. The problem with that is the string is saved
for use with fread_string so everything read will have a tilde at the
end. The reason for this is some spells are multipul words, and as the
name of the function implys fread_word only reads till whitespace or
eof/eol, sooo, you might want to consider using fread_string there.