関数で free を正しい方法で使用しているかどうか教えてください。コードを valgrind でチェックしましたが、エラーは発生しませんでした。
void strconcat (char **str1, const char *str2) {
unsigned long str1len = strlen(*str1);
unsigned long str2len = strlen(str2);
char *tempStr = malloc(sizeof(char) * (str1len + str2len + 1));
memcpy(tempStr, *str1, str1len);
memcpy(&(tempStr[str1len]), str2, (str2len + 1));
free(*str1);
*str1 = tempStr;
}
main-function では、次のように関数を呼び出しています。
int main() {
char *str1 = malloc(25);
str1 = strcpy(str1, "First part of the string");
char *str2 = malloc(16);
str2 = strcpy(str2, " - second part.");
printf("%s\n", str2);
strconcat(&str1, str2);
printf("%s\n", str1);
free(str1);
free(str2);
return EXIT_SUCCESS;
}
ご協力ありがとうございました!