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()
的本地指针;
val
在GetVal()
的末尾被销毁,因此指针值无论如何都会无效。
【讨论】:
【参考方案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 ***