我在使用Visual Studio 2010解决运行时问题C ++时遇到了困难,但编译得很好。
我在API(来自另一个DLL)的类中有一个带有此签名的函数:
ReturnCode GetValue(const char* &value) const;
我用它来打电话:
ReturnCode Test::getStuff(const char* &value)
{
ValueGetter valueGetter = myClass.GetValueGetter();
ReturnCode returnCode = valueGetter.GetValue(value);
return returnCode;
}
那叫做
const char* tempStr;
getStuff(tempStr);
我所看到的是,在调用valueGetter.GetValue(value)之后,在行上正确设置了值。但是,一旦我再次踩了一下这个功能的范围,那么这个价值就会变得胡言乱语。我做错了什么,我该如何正确地做到这一点?希望不必分配内存,复制值,我将在以后删除。
答案 0 :(得分:0)
看起来它返回一个指向超出范围的变量的指针。
ValueGetter::GetValue
的本地变量或ValueGetter
的数据成员(注意valueGetter
返回时getStuff
超出范围)。
在后一种情况下,这应该有效:
ReturnCode Test::getStuff(std::string &value)
{
ValueGetter valueGetter = myClass.GetValueGetter();
const char* tempStr;
ReturnCode returnCode = valueGetter.GetValue(tempStr);
value = tempStr;
return returnCode;
}
std::string tempStr;
getStuff(tempStr);