Hi Robert,

You didn't mention your command line for Splint, so I used no options.

The source looks like not knowing how memory allocation and pointers are 
working (no offend). Therefore it's a bit difficult to know what is ment. 
Anyway, here we go:

> Implicitly only storage options->min_string (type char *) not released
> before assignment: options->min_string = min_string
> A memory leak has been detected. Only-qualified storage is not released
> before the last reference to it is lost. (Use -mustfreeonly to inhibit
> warning)

Splint assumes that pointers without annotation are the only reference to their 
memory spaces. By assigning a new address, this old pointer is lost. If 
annotated by "dependent" these pointers are not responsible for the memory.

> Kept storage min_string passed as only param: free (min_string) storage
> is transferred to a non-temporary reference after being passed as  keep
> parameter. The storage may be released or new aliases created. (Use
> -kepttrans to inhibit warning)

Here Splint found an actual error which is probably the root of your crashes. 
Releasing this memory but keeping the pointer in options->min_string is an 
error if the memory pointed to is used later.

Splint does not report this error after annotating "options->min_string" any 
more, unfortunately.

To get no reports at all, I had to add an "unused" annotation for "argc" and to 
release the memory of "charset".

Cheers,
Bodo


typedef struct opts_struct {
  /*@ dependent @*/ char *low_charset;
  size_t clen;
  /*@ dependent @*/ char *startstring;
  size_t starthere;

  /*@ dependent @*/ char *min_string;
} options_type;

/* ... */

int main(/*@ unused @*/ int argc, char **argv) {

  /* ... */

  fill_strings(options);

  free(charset);
  free(options);
return 0;
}

_______________________________________________
splint-discuss mailing list
splint-discuss@mail.cs.virginia.edu
http://www.cs.virginia.edu/mailman/listinfo/splint-discuss

Reply via email to