C++ 错误消息 : invalid pointer

标签 c++ pointers runtime-error memcpy

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

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");

关于C++ 错误消息 : invalid pointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12084641/

相关文章:

c++ - 在 ubuntu 20.04 上安装 Catch2 #include <catch2/catch.hpp>

c++ - 指向数组的指针

C++ 数据验证工作不正常和 PDB 错误?

C++、全局变量和动态共享库

c++ - 使用 Xcode 4 在 C++ 中编程

c - "dereferencing"这个词是从哪里来的?

c - 将 C 指针打印为 %i 和 %u

javascript - “没有打开文档窗口”错误

Swift: Overriding Self-requirement 是允许的,但会导致运行时错误。为什么?

c++ - Qt Serial Port - 一致读取数据