最近写了了一段代码
std::string* str=new std::string("1233");
std::string& tem=*str;
printf("str=%s\n",str->c_str());
printf("tem=%s\n",tem.c_str());
std::cout<<"str="<<*str<<std::endl;
std::cout<<"tem="<<tem<<std::endl;
delete str;
printf("str=%s\n",str->c_str());
printf("tem=%s\n",tem.c_str());
std::cout<<"str="<<*str<<std::endl;
std::cout<<"tem="<<tem<<std::endl;
运行结果为
str=1233
tem=1233
str=1233
tem=1233
str=(null)
tem=(null)
Segmentation fault (core dumped)
可以看到,再把str指向的内存区域释放后,用printf输出时为null,即可自动识别内存是否有效;而用cout输出时,程序会崩溃。
然后又做了一下试验
std::string* str=NULL;
printf("str=%s\n",str->c_str());
结果
Segmentation fault (core dumped)
即在str为空指针时,printf输出也会导致崩溃