...
Code Block |
---|
#include <stdlib.h> #include <stdio.h> int func(char *str, size_t size) { char *temp = str; /*str and temp reference same location */ size_t i; for (i = 0; i < size-1; i++) temp[i] += 32; free(temp); return 0; } int main(void) { size_t size = 5; char *str = malloc(size); strncpy(str,"ABCD",size); printf("%s\n",str); /* 1st printing of str */ func(str,size); free(str); return 0; } |
Compliant Solution 1
Only free a pointer to dynamic memory once. This can be accomplished in this example by removing the call to free(str)
in main()
.
Code Block |
---|
#include <stdlib.h> #include <stdio.h> int func(char *str, size_t size) { char *temp = str; /*str and temp reference same location */ size_t i; for (i = 0; i < size-1; i++) temp[i] += 32; free(temp); return 0; } int main(void) { size_t size = 5; char *str = malloc(size); strncpy(str,"ABCD",size); printf("%s\n",str); /* 1st printing of str */ func(str,size); return 0; } |