jon*_*ham 0 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;
}
Run Code Online (Sandbox Code Playgroud)
调用上面函数的代码是这样的:
char* str = "John";
str = strjoin(str,"\x20");
str = strjoin(str,"Doe");
Run Code Online (Sandbox Code Playgroud)
在上面的函数strjoin中,我为新字符串分配内存,所以我释放旧的str1.为什么str1无效指针?
在您的第一次调用中,join您将指向字符串文字的指针传递给free.free除非已分配释放的内存,否则不应该调用.
您可以使用以下命令在调用方中修复此问题strdup:
char* str = strdup("John");
str = strjoin(str,"\x20");
str = strjoin(str,"Doe");
Run Code Online (Sandbox Code Playgroud)