我们在函数自动变量中使用的字符串文字是什么?还是他们分配在堆中,我们必须手动释放?函数内的字符串文字:自动变量还是分配在堆中?
我遇到类似下面显示的代码的情况,其中我将字符串文字分配给类的私有字段(在代码中标记为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,但我只是对此感到好奇。
任何指针或帮助,一如既往,非常感谢:)谢谢。
修改它是非法的。这真的是一个const char *。 – 2008-10-06 16:01:30
+1 const char *。 MemoryLeak :: s应该是const,它应该是const char * MemoryLeak :: retrieve() – quamrana 2008-10-06 17:20:39