2013-11-25 102 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

相關問題