blitzkriegz
blitzkriegz

Reputation: 9576

C++ string: Invalid pointer error

I am getting an invalid pointer error when I call the below function. Why is this happening?

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

The objective is to return the substring.

Upvotes: 0

Views: 2312

Answers (3)

sharptooth
sharptooth

Reputation: 170549

val variable inside Get() gets destroyed once Get() returns, thus the pointer to val body becomes invalid. Also value parameter is a copy of the original pointer, so the original val pointer in main() function is left unchanged and still holds a null pointer value.

Change it to

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

Upvotes: 8

Sarfaraz Nawaz
Sarfaraz Nawaz

Reputation: 361732

Prefer using std::string.

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

string s = Get();

By the way, an interesting article (by Herb Sutter) you would like to read now is:

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

Upvotes: 1

Simone
Simone

Reputation: 11797

I see two mistakes:

  • You assign a val.c_str() to a pointer that is local to GetVal();
  • val is destroyed at the end of GetVal(), so the pointer value would be invalid anyway.

Upvotes: 2

Related Questions