在以下代码中:
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;
}
我遇到的问题是,当a
为null
时,如果它进入if
块,则a
的分配无效,我得到了垃圾。是因为a
是null
,我无法为其分配值吗?我该如何解决这个问题?
答案 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 ++,你可能很容易造成内存泄漏并使你的整个腿断开。