我们最近在大学里做了一个讲座,我们的教授告诉我们在使用不同语言编程时需要注意的不同事项.以下是C++中的一个示例:
std::string myFunction()
{
return "it's me!!";
}
int main(int argc, const char * argv[])
{
const char* tempString = myFunction().c_str();
char myNewString[100] = "Who is it?? - ";
strcat(myNewString, tempString);
printf("The string: %s", myNewString);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这会失败的原因是return "it's me!!"
使用char []隐式调用std :: string构造函数.该字符串从函数c_str()
返回,函数返回指向数据的指针std::string
.
由于函数返回的字符串未在任何地方引用,因此应立即取消分配.这就是理论.
但是,让这段代码运行没有问题.很想知道你的想法.谢谢!
jua*_*nza 45
你的分析是正确的.你有什么是未定义的行为.这意味着几乎任何事情都可能发生.在您的情况下,用于字符串的内存似乎虽然取消分配,但在访问时仍保留原始内容.这通常是因为操作系统没有清除解除分配的内存.它只是标记为可供将来使用.这不是C++语言必须处理的事情:它实际上是一个OS实现细节.就C++而言,适用于所有"未定义的行为".
归档时间: |
|
查看次数: |
4528 次 |
最近记录: |