返回首页

我发现,在代码部分是内存泄漏。请帮我解决这个问题:

inline string Change(char *pointer) {

    string str;

    char temp[32] = "";

 

    sprintf(temp,"%c:%c:%c:%c:%c:%c", //line 1

        temp[0],temp[1],temp[2],

        temp[3],temp[4],temp[5],

    );

 

    str = temp;

    return str;

}

回答

评论会员:游客 时间:2012/02/07
OriginalGriff的:这不是泄漏-这是一个挂参考。{C}在栈上创建一个32个字符数组codeprelang="cs"str=temp;spanclass="code-keyword"return/spanstr;/pre/code的返回指向数组的指针。好吧,这是内联代码,但是当您退出该程序时,它仍然是您正在使用的堆栈参考。如果你是指以外的常规,在它被修建的字符串,然后它指向内存,要么是未使用的,或者是在不同的功能使用。总是从堆等数据-堆栈分配特亚吉ASHISH
| 40:有没有内存泄漏的功能变化()

但检查如果你的char *传递功能的变化()指向动态分配之前调用功能变化(char *指针);
和你不使用char *指针,在你的整体功能,确保他的功能的逻辑正确性。

您可以使用std :: auto_ptr的避免内存leak.Boost智能指针的可能是更好的选择。

祝你好运。 {S0}
评论会员:ASHISH特亚吉40 时间:2012/02/07
有没有内存泄漏的功能变化()

但检查如果你的char *传递功能的变化()指向动态分配之前调用功能变化(char *指针);如果是动态分配,然后不要忘记释放/删除

和你不使用char *指针,在你的整体功能,确保你的函数的逻辑正确性。

您可以使用std :: auto_ptr的避免内存leak.Boost智能指针的可能是更好的选择。

祝你好运。 {S0}
评论会员:Stefan_Lang 时间:2012/02/07
除前面提到的问题,你的函数将总是返回一个空字符串:
{体C3} 这保留在栈上一个char数组,并初始化为空字符串,i。 E。温度[0] = 0;

{的C4}这个命令会将温度[0]到temp [0],所以它停留在0。 (当然,你可能实际上意味着复制指针[0]到温度[0]吗?)

{C5的}这指定温度为str表示的字符串。由于温度[0] == 0,温度表示空字符串,str将是空的。

也许你是误以为"内存泄漏"您输入的看似莫名其妙消失?正是这样,我们可以肯定,我们谈论同样的事情:]