Perhaps this is because I'm doing something really stupid here, but I have not been able to modify the following simple test program to clear all splint complaints. The main problem is splint doesn't seem able to recognize that I deallocate my pointers using the DeAllocateStruct routine. And I don't want to use the -mustfreefresh flag because I do want to check the other situations where I free my memory explicitly in the main program. Any suggestions/comments?
Thanks. David #include <stdio.h> #include <stdlib.h> #include <string.h> struct testStruct { char *testStructString; }; int DeAllocateStruct(struct testStruct **local); /*====================================================================*/ int main () { struct testStruct *localStruct; struct testStruct *secondStruct; char *localString1 = "1 localStruct\n"; char *localString2 = "2 localStruct\n"; char *secondString1 = "1 secondStruct\n"; char *secondString2 = "2 secondStruct\n"; /*====================================================================*/ localStruct = malloc(sizeof(localStruct)); if (localStruct != NULL) { printf("\nlocalStruct ready to work\n"); localStruct->testStructString = malloc(sizeof(localString1)); if (localStruct->testStructString != NULL) { strcpy(localStruct->testStructString,localString1); printf("string = %s",localStruct->testStructString); strcpy((*localStruct).testStructString,localString2); printf("string = %s",(*localStruct).testStructString); } } /*====================================================================*/ secondStruct = malloc(sizeof(secondStruct)); if (secondStruct != NULL) { printf("\nsecondStruct ready to work\n"); secondStruct->testStructString = malloc(sizeof(secondString1)); if (secondStruct->testStructString != NULL) { strcpy(secondStruct->testStructString,secondString1); printf("string = %s",secondStruct->testStructString); strcpy((*secondStruct).testStructString,secondString2); printf("string = %s",(*secondStruct).testStructString); } } /*====================================================================*/ (void) DeAllocateStruct(&localStruct); (void) DeAllocateStruct(&secondStruct); /*====================================================================*/ /* The following will never be executed if the deallocation is successful */ if (localStruct != NULL) { printf("string = %s",localStruct->testStructString); } if (secondStruct != NULL) { printf("string = %s",secondStruct->testStructString); } return(0); } /*====================================================================*/ int DeAllocateStruct(struct testStruct **local) { free((*local)->testStructString); (*local)->testStructString = NULL; free(*local); *local = NULL; return(0); } /*====================================================================*/