我想动态分配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
调用中给出了运行时错误
我误解了什么吗?
答案 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