我们在函数内部使用的字符串文字是自动变量吗?或者它们是否分配在我们必须手动释放的堆中?
我的情况类似于下面显示的代码,其中我将字符串文字分配给类的私有字段(在代码中标记为 ONE)并稍后在我的程序中检索它并使用它(标记为 TWO)。我是否将堆栈中的变量分配给 ONE 中的字段?代码是否可以引用一个悬空指针,在这种情况下它可以工作,因为程序足够小?
我已经编译并运行了它,它运行良好,但是在我的实际程序中出现了奇怪的崩溃,我将字符串文字分配给这样的类的字段,我怀疑我上面提到的情况。
#include <iostream>
using namespace std;
class MemoryLeak
{
private:
char *s;
public:
MemoryLeak() {}
void store()
{
s = "Storing a string"; // ONE
}
char *retrieve()
{
return s;
}
};
int main()
{
MemoryLeak *obj = new MemoryLeak();
obj->store();
cout << obj->retrieve() << endl; // TWO
delete obj;
return 0;
}
我应该将变量“s”声明为 char 数组而不是指针吗?我打算使用std :: string,但我只是对此感到好奇。
一如既往,非常感谢任何指针或帮助:) 谢谢。