将值分配给空字符*

时间:2011-09-01 22:42:29

标签: c++

在以下代码中:

const char * my_func1(char const *str)
{
    const char *a = func(); // returns a char *, but I guess its ok to assign non-const to const
    if(a == NULL)
    {
        MY_String b = str;      //MY_String is an inhouse class with string functions
        b.replace("\"", "\'");  //replace " with '
        a = (const char *)b;    //MY_string has an operator (const char *)
    } 

    return a;
}

我遇到的问题是,当anull时,如果它进入if块,则a的分配无效,我得到了垃圾。是因为anull,我无法为其分配值吗?我该如何解决这个问题?

4 个答案:

答案 0 :(得分:7)

我不知道MY_String是什么。但不管它是什么,它都是一个局部变量。因此它在if块结束时超出了范围。所以无论它operator const char*做什么,一旦基础对象被破坏,它可能不会给你合理的结果。

这可能有效的唯一方法是重载运算符动态分配新的char缓冲区,并返回指向它的指针。但那是荒谬的。

答案 1 :(得分:1)

如果没有看到MY_String的实际界面,很难分辨,但我会根据你的评论来假设它的行为。

看起来您正在为a分配b中分配的缓冲区。但是b在if-block的末尾被取消分配。所以b被破坏了,所以他的缓冲区(我想)。

这可以解释为什么你的a指向垃圾。

答案 2 :(得分:0)

当然,即使它是NULL,您也可以分配给a。您不能做的是分配到*a

b是否为其成员使用自动存储?如果是这样,请确保您没有从转换运算符返回指向其中一个的指针,因为一旦b超出范围,它将变为无效。

答案 3 :(得分:0)

好吧,b已不在if块之外。要解决此问题,您需要先为a分配一些内存(使用new)。但是,这并不是很像C ++,你可能很容易造成内存泄漏并使你的整个腿断开。