如何在完成执行后释放在函数内部分配的动态内存

时间:2014-02-04 01:29:41

标签: c

如何释放函数内部分配的动态内存 完成执行后

我分配了两个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未声明(首次在此函数中使用)

提前致谢

1 个答案:

答案 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;
}