C++ 用malloc开辟String类型的空间,用cin赋值出现问题

我开辟一个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;
    }

我刚输入第一个字符串就出现问题:

img

是string类型会出现内存泄漏还是我代码写的有问题?
请大家帮我看一下

下面代码

q = (string*)malloc(sizeof(string) * 3);

应该改为

q = new string[3];

mallocnew的区别在于,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];

mallocnew的区别在于,malloc只是分配一定大小的内存,而new除了分配内存外,还会调用类的构造函数进行初始化。在你的代码里,malloc只是分配了内存而没有对string类对象进行初始化,其类对象内部数据是无效的,使用时就会出问题。所以C++代码里应该用new/delete替换C语言中malloc/free。