我开辟一个string类型的空间,大小为3。不为NULL,但是赋值的时候就出现问题。无论用cin赋值还是直接赋值都出现问题。
源代码如下:
string* q;
q = (string*)malloc(sizeof(string) * 3);
if (q)
{
for (int i = 0; i < 3; i++)
{
cin >> *(q+i);
}
}
for (int i = 0; i < 3; i++)
{
cout << *(q + i) << endl;
}
我刚输入第一个字符串就出现问题:
是string类型会出现内存泄漏还是我代码写的有问题?
请大家帮我看一下
下面代码
q = (string*)malloc(sizeof(string) * 3);
应该改为
q = new string[3];
malloc
和new
的区别在于,malloc
只是分配一定大小的内存,而new
除了分配内存外,还会调用类的构造函数进行初始化。在你的代码里,malloc只是分配了内存而没有对string类对象进行初始化,其类对象内部数据是无效的,使用时就会出问题。所以C++代码里应该用new/delete替换C语言中malloc/free。
把malloc改成new就行了,malloc只是分配内存,sizeof无法计算string的内存大小,不能分配有效空间。
你看一下是不是因为你少了结束符
下面代码
q = (string*)malloc(sizeof(string) * 3);
应该改为
q = new string[3];
malloc
和new
的区别在于,malloc
只是分配一定大小的内存,而new
除了分配内存外,还会调用类的构造函数进行初始化。在你的代码里,malloc只是分配了内存而没有对string类对象进行初始化,其类对象内部数据是无效的,使用时就会出问题。所以C++代码里应该用new/delete替换C语言中malloc/free。