C++ 中当vector<char*>中元素是在堆区开辟的,用另一个vector<sting>拷贝以后,会发生泄露或多次释放的问题吗?

问题遇到的现象和发生背景
比如: 
char * Getdata(int ) 
{
char *s=new char[10]();
....
return s;
}
vector<char*> result;
vector<string> result_s;
result.push_back(Getdata(10));
result_s.assign(result.begin(),result_s.end());
vector<char*>::iterator it;
    for (it = GeoSOT_s.begin(); it != GeoSOT_s.end(); it++)
        delete[] * it;

那么此时,result_s中的string还存在吗?string自动释放的话,会造成多次释放同一块内存的问题吗? 
如果不用原容器释放, 用result_s释放的话,会发生内存泄漏吗?

string的构造函数string(const char*)是深拷贝,它会把const char*拷贝到string字符串中,所以调用完result_s.assign函数之后,result_s与result就没有关系了(copy了)。
所以:

  1. 要释放result中new出来的char数组,就必须要调用delete[].
  2. string析构函数释放的内存,跟GetData中new出来的内存根本不是同一个,所以不存在多次释放的问题。

1.你代码中并没有写到GeoSOT_s这个容器的数据。
2.按照你说的GeoSOT_s拷贝了result的数据并且释放了的话。那么result里面虽然还有数据,但所有的char*都指向了一个未指定内存的地址,访问的话就有概率造成段错误。
3.按照你说的GeoSOT_s拷贝了result的数据并且释放了的话。回答你的问题,result_s中的string还存在吗? 指针存在,但是指针指向的数据不存在了。string自动释放的话,会造成多次释放同一块内存的问题吗? new出来的内存不会自动释放,不会造成多次释放同一块内存。如果不用原容器释放, 用result_s释放的话,会发生内存泄漏吗? 只要是释放了就不会,不管是不是原容器。