动态分配std::string数组

Dynamically allocate array of std::string

本文关键字:数组 string 动态分配 std      更新时间:2023-10-16

我想动态分配一个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;
}

但是在delete names

行第2次allocate()调用时出现了运行错误

我误解了什么吗?

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

您不能在数组上调用delete names,您应该使用

 delete[] names 

std::vector<std::string>代替names数据结构怎么样?

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

delete[] names