C++ 字符串:无效的指针错误

Posted

技术标签:

【中文标题】C++ 字符串:无效的指针错误【英文标题】:C++ string: Invalid pointer error 【发布时间】:2011-01-26 10:13:26 【问题描述】:

我在调用以下函数时收到无效指针错误。为什么会这样?

void Get(const char* value)

    string st("testing string");
    string val = st.substr(1, st.length()); 
    value = val.c_str();        


int main()

    const char *val = NULL;
    GetVal(val);
    cout<<val;

目标是返回子字符串。

【问题讨论】:

【参考方案1】:

Get() 中的val 变量在Get() 返回时被销毁,因此指向val 主体的指针无效。另外value 参数是原始指针的副本,因此main() 函数中的原始val 指针保持不变,仍然保持空指针值。

改成

string Get()

    string st("testing string");
    string val = st.substr(1, st.length()); 
    return val;

【讨论】:

【参考方案2】:

我看到两个错误:

您将val.c_str() 分配给GetVal() 的本地指针; valGetVal() 的末尾被销毁,因此指针值无论如何都会无效。

【讨论】:

【参考方案3】:

更喜欢使用std::string

string Get()

    string st("testing string");
    return st.substr(0, st.length()/2);//returning substring


string s = Get();

顺便说一句,您现在想阅读的一篇有趣的文章(Herb Sutter 撰写)是:

GotW #88: A Candidate For the “Most Important const”

【讨论】:

以上是关于C++ 字符串:无效的指针错误的主要内容,如果未能解决你的问题,请参考以下文章

*** `./pw' 中的错误:free():无效指针:0x0000000000602200 ***

如何解决 munmap_chunk():C++ 中的无效指针错误

C++ 对象指针的优先级队列在运行时错误为无效堆

Python ctypes:如何释放内存?获取无效指针错误

Python ctypes:如何释放内存?获取无效指针错误

返回对字符串对象的引用,错误:“const string&”类型的引用初始化无效。 C++