通过调用string :: c_str()返回的指针指向哪里?在下面的代码片段中,我想我会给出一个分段错误,但它给了我正确的输出.如果string :: c_str()返回的指针指向字符串对象内部的内部位置,那么当函数返回并调用对象析构函数时,我应该获得无效的内存访问.
#include <iostream>
#include <string>
using namespace std;
const char* func()
{
string str("test");
return str.c_str();
}
int main()
{
const char* p = func();
cout << p << endl;
return 0;
}
Output: test
Compiler: g++ 4.3.3
Platform: ubuntu 2.6.28-19
Run Code Online (Sandbox Code Playgroud)
Jam*_*lis 13
调用指向返回的指针在哪里
string::c_str()?
它指向内存中的某个位置,其中包含以其为内容的以null结尾的字符串std::string.
指针仅在std::string被修改或销毁之前有效.它如果调用也可能无效c_str()或data()试.
基本上,你最安全的选择是假设c_str()下次你对std::string对象做某事时获得的指针无效.
我应该获得无效的内存访问权限.
不,你得到未定义的行为.您可能会遇到某种类型的内存访问错误(如分段错误),但您的程序似乎也可能继续正常运行.它可能看起来有一次运行你的程序,但下一次失败.
| 归档时间: |
|
| 查看次数: |
1620 次 |
| 最近记录: |