2013-11-25 153 views
0

我很难解决运行时问题C++,使用Visual Studio 2010,它虽然编译得很好。const char *&作为函数参数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(值)后正确设置的行。但是,一旦我走出功能的范围再增加一次,这个价值就变成了胡言乱语。我做错了什么,以及我如何正确地做到这一点?希望不必分配内存,复制值,我稍后会删除。

+0

似乎没有成为这里有什么问题。你怎么调用'getStuff'? –

+1

你在valueGetter.GetValue中赋值了什么?这似乎是一个本地价值超出范围并被销毁的案例(您赋予的价值)。另外,如果在发行模式下运行程序,可能会导致优化。 – Spook

+1

'价值变成乱码'价值本身是否发生变化,或者这个价值指向的内存变成乱码? –

回答

0

看起来像它返回一个指向超出范围的变量的指针。 要么是ValueGetter::GetValue的本地变量,要么是ValueGetter的数据成员(请注意,当getStuff返回时,valueGetter超出范围)。

在后一种情况下,这应该工作:

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); 
+0

我想这会工作,虽然它迫使我成为std库。 – AberAber

相关问题