2

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

我是不是误会了什么?

4

3 回答 3

2

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

于 2013-06-01T11:19:18.063 回答
2

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

 delete[] names 

反而。

不如将 astd::vector<std::string>用于您的names数据结构?

于 2013-06-01T11:21:53.767 回答
1

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

delete[] names
于 2013-06-01T11:24:22.200 回答