动态分配std :: string数组

时间:2013-06-01 11:15:49

标签: c++

我想动态分配std::string的数组。有一个功能要分配。我可以通过程序调用该函数多次。如果已经分配了指向数组的指针,我想首先释放内存然后分配新内存。

以下是我的尝试:

std::string *names;
bool already_allocated = false;
void allocate( int n)
{
    if( already_allocated)
    {
        delete names;
    }
    names = new std::string[n];
    already_allocated = true;
}

int main()
{
    allocate(5);
    allocate(6);
    return 0;
}

但它在行allocate()的第二次delete names调用中给出了运行时错误

我误解了什么吗?

3 个答案:

答案 0 :(得分:2)

您必须使用delete [] names;因为要删除字符串数组,delete names;会删除单个对象。

答案 1 :(得分:2)

您无法在阵列上调用delete names,您应该使用

 delete[] names 

代替。

如何使用std::vector<std::string>代替names数据结构?

答案 2 :(得分:1)

使用new分配内存时可以使用delete运算符,但是当使用new []分配内存时,为了避免内存泄漏,请使用delete []运算符,删除为数组分配的内存。

delete[] names