C++错误消息:指针无效

C++ error message: invalid pointer

本文关键字:指针 无效 消息 错误 C++      更新时间:2023-10-16

我有一个函数可以将一个字符串附加到另一个字符串:

char* strjoin(char* str1,const char* str2) {
  long len1 = strlen(str1);
  long len2 = strlen(str2);
  char* result = (char*)malloc(len1+len2+1);
  memcpy(result,str1,len1+1);
  memcpy(result+len1,str2,len2+1);
  free(str1); <--------- program crashes here with error: invalid pointer
  return result;
}

调用上面函数的代码是这样的:

char* str = "John";
str = strjoin(str,"x20");
str = strjoin(str,"Doe");

在上面的函数strjoin中,我为新字符串分配内存,所以我释放了旧的str1。为什么str1指针无效?

join的第一次调用中,将指向字符串文字的指针(只读)传递给free。除非已经分配了要释放的内存,否则不应该调用free

您可以使用strdup:在调用者中修复此问题

char* str = strdup("John");
str = strjoin(str,"x20");
str = strjoin(str,"Doe");