可能重复:
可以在其范围之外访问局部变量的内存吗?
我已经使用指针声明了一个C样式数组,并为它赋值一个函数返回的值.
1.const char* str = chArr->readString();
就在上面之后,我想以如下方式讨论str:
2.cout << "pointer to char is = " << str <<endl;
而且readString是:
char* CharArray::readString()
{
std::cout << "Insert a string of max 19 length:" <<std::endl;
char string[20];
std::cin.getline(string,20,'\n');
return string;
}
Run Code Online (Sandbox Code Playgroud)
当我在第2行放置一个断点时,我可以看到正确的结果作为值str.但是控制台窗口什么都没有显示,在通过第2步之后,当我查看该str值时,它显示的内容类似于" P÷7"或" äû:",...
也许值得一提的是,对于str我来说,长度为4,5.尽管str的长度不是19.
您正在返回指向局部变量的指针.在函数结束后,系统将再次使用此变量的内存地址.所以有些其他代码可能会用一些随机数据覆盖它,这就是你看到乱码的原因.
为了安全地执行此操作,请使用:
char* string = new char[20];
delete []之后请记住.