读书人

指针的引用有关问题

发布时间: 2012-03-09 21:42:54 作者: rapoo

指针的引用问题

C/C++ code
#include<iostream>#include<string.h>using namespace std;class TestPointRef{public:    TestPointRef(char* pra):m_buffer(pra)    {}    ~TestPointRef()    {    }    void init()    {        strncpy(m_buffer,"123456789",9);        *(m_buffer+9) = '\0';    }    void print()    {        while(*m_buffer != '\0')        {           std::cout<<*m_buffer;           ++m_buffer;        }    }public:    char*& m_buffer;};int main(){    char* pra = new char[10];    TestPointRef test(pra);    test.init();    test.print();    delete []pra;    return 0;}

程序直接在init函数strncpy的时候coredump,我真没调明白。求解了

[解决办法]
C/C++ code
//不知这样对否class TestPointRef{public:    TestPointRef(char*& pra):      m_buffer(pra)    {    }    ~TestPointRef()    {    }    void init()    {        strncpy(m_buffer,"123456789",9);        *(m_buffer+9) = '\0';    }    void print()    {            std::cout<<m_buffer;    }public:    char*& m_buffer;};int main(){    char* pra = new char[10];    TestPointRef test(pra);    test.init();    test.print();    delete []pra;    return 0;}
[解决办法]
请参考:
C/C++中指针和引用之相关问题研究
[解决办法]
构造函数里面:
TestPointRef(char* pra):m_buffer(pra){}
m_buffer引用的是形参pra而不是实际传入的参数,该形参在构造函数结束时便被释放,导致m_buffer引用了一个无效的变量。
应改为这样TestPointRef(char*& pra):m_buffer(pra){}

[解决办法]
额 因为vc的编译器使用的是strncpy的asm版本所以他没考虑到引用这个情况。所以就不用再挣扎了。

读书人网 >C++

热点推荐