如何释放函数内部分配的动态内存 完成执行后
我分配了两个char * str2R& str4R 我的职能是
char * MMP(char * index)
{
char* str1= "AT+CMGR=";
char* str2R = (char *) malloc(1 + strlen(str1)+ strlen(index) );
strcpy(str2R, str1);
strcat(str2R, index);
char* str3="\r";
char* str4R = (char *) malloc(1 + strlen(str2R)+ strlen(str3) );
strcpy(str4R, str2R);
strcat(str4R, str3);
return str4R;
};
当我打电话
free(str2R);
free(str4R);
调用该函数后,在main或另一个文件中出现此错误
错误:str2R未声明(首次在此函数中使用)
提前致谢
答案 0 :(得分:0)
您不需要分配两个char*
缓冲区,一个就足够了。然后,当使用它时,调用者需要free()
返回char*
。
试试这个:
char * MMP(char * index)
{
char* str1 = "AT+CMGR=";
char* str3 = "\r";
char* str2R = (char *) malloc(strlen(str1) + strlen(index) + strlen(str3) + 1);
if (str2R)
{
strcpy(str2R, str1);
strcat(str2R, index);
strcat(str2R, str3);
}
return str2R;
}
char *str = MMP("some value");
...
free(str);
话虽如此,使用MMP()
代替snprintf()
和strcpy()
可以更好地提供strcat()
内部的逻辑:
char * MMP(char * index)
{
char* fmt = "AT+CMGR=%s\r";
char* str2R = NULL;
int len = snprintf(NULL, 0, fmt, index);
if (len > 0)
{
++len;
str2R = (char *) malloc(len);
if (str2R)
snprintf(str2R, len, fmt, index);
}
return str2R;
}