指针的引用问题
- 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版本所以他没考虑到引用这个情况。所以就不用再挣扎了。