【发布时间】:2013-11-25 14:54:40
【问题描述】:
我在使用 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;
}
那叫 using
const char* tempStr;
getStuff(tempStr);
我看到的是,在调用 valueGetter.GetValue(value) 后,值在该行上设置正确。但是,一旦我再一步超出函数的范围,值就会变得乱七八糟。我做错了什么,我该如何正确地做到这一点?希望不必分配内存,复制值,我稍后会删除。
【问题讨论】:
-
这里似乎没有什么问题。你怎么打电话给
getStuff? -
你为 valueGetter.GetValue 中的值分配了什么?这似乎是局部值超出范围并被破坏(您分配给值的那个)的情况。另外,如果您在Release模式下运行程序,可能会受到优化的影响。
-
value becomes gibberish是值本身发生了变化,还是这个值指向的内存变得乱码? -
我在Debug中运行,函数中的值从0xcccccccccccccccc
开始。调用 0x0000000002123290“测试”后。一旦进入 } 大括号,指针是相同的,但值变成奇怪的符号/空格/随机数。我更新了这个例子,我忘记了我在那里也有一个临时分配,而不是课堂上的成员变量。我想知道是否因为这超出了范围,所以它所引用的 const char* 指针的内存也是如此......但是有没有办法在不复制/分配内存的情况下做我正在做的事情。 -
你还能显示
value指向哪个字符串吗?您能否在项目设置中验证您使用的是哪种运行时?
标签: c++ function reference constants