2011-01-26 119 views
0

當我調用下面的函數時,出現無效指針錯誤。這是爲什麼發生?C++字符串:指針錯誤無效

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

目標是返回子字符串。

回答

8

val可變內部Get()被破壞一次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()的末尾被銷燬,所以指針值無論如何都是無效的。