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