【问题标题】:const char*& as a function parameter C++const char*& 作为函数参数 C++
【发布时间】: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


【解决方案1】:

看起来它返回一个指向超出范围的变量的指针。 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);

【讨论】:

  • 我想这会起作用,尽管它迫使我进入标准库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多