簡體   English   中英

C ++字符串:無效的指針錯誤

[英]C++ string: Invalid pointer error

當我調用下面的函數時,我收到一個無效的指針錯誤。 為什么會這樣呢?

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;
}

目的是返回子字符串。

一旦Get()返回, Get() val變量將被銷毀,因此指向val主體的指針無效。 另外, value參數是原始指針的副本,因此main()函數中的原始val指針保持不變,並且仍保留空指針值。

更改為

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

我看到兩個錯誤:

  • 您分配一個val.c_str()的指針是本地GetVal() ;
  • valGetVal()的末尾銷毀,因此指針值無論如何都是無效的。

最好使用std::string

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

string s = Get();

順便說一句,您現在想閱讀的一篇有趣的文章(由Herb Sutter撰寫)是:

GotW#88:“最重要的const”候選人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM