通过几种方法传递char *最终不起作用

时间:2013-03-30 17:25:30

标签: c++

我在分配这样的代码后获得类成员的值时遇到问题:

bool ModeData::setPasswd(char* _pass)
{
    return (this->setString(this->passwd_, _pass) ? true : false);
}

bool ModeData::setOutput(char* _out)
{
    return (this->setString(this->output_, _out) ? true : false);
}

其中setString是这样的:

bool ModeData::setString(char* _toStr, char* _fromStr)
{
    // check if already exists and delete
    this->delIfPresent(_toStr);

    // allocate space for the new string
    _toStr = new char[strlen(_fromStr) + 1];

    // copy new string
    if(strcpy(_toStr, _fromStr))
    {
        return true;
    }

    // if something gone wrong return 'false'
    return false;
}

然后如果我想打印this-> passwd_的值,我什么也得不到。 我认为指针在通过方法时会丢失,但我不确定。

1 个答案:

答案 0 :(得分:3)

你应该通过ref传递指示......不,不!等一会。你应该使用指针,你应该使用std::string代替!这将使你的生活变得更加轻松。

这就是说,如果真的想要使用指针,那么问题是你是按值传递它们的。一旦函数返回,对这些指针所做的更改(特别是_toStr = new char[strlen(_fromStr) + 1];中的赋值)将不会对调用者可见 - 并且作为副作用,您的程序正在泄漏内存。

要解决此问题,请通过引用传递指针

    bool ModeData::setString(char*& _toStr, char*& _fromStr)
//                                ^              ^

不要忘记用delete[]分配的new[]数组,否则会有内存泄漏。但是,让我再次给你这个建议:使用std::string而不是通过原始指针进行手动内存管理。