动态数组的作用域解决方案

动态数组的作用域
书上学来的 “动态分配的数组将一直存在,直到程序显示释放它为止。 程序员只能通过其地址间接的访问堆中的对象。”
这里有个疑问“vector<string> vv;
string a;
while (cin >> a)
vv.push_back(a);
size_t b = vv.size();
char **p = new char*[b];
char **ppd = p;
for (vector<string> :: iterator ii = vv.begin(); ii != vv.end(); ++ii,++ppd)
{
cout << *ii << " ";
char *ppc = new char[(*ii).size()+1];
strcpy(ppc, (*ii).c_str());
*ppd = ppc;
}
delete [] p;
cout << endl;
  cout << ppc;//我这里想输出ppc,但是报错说没有定义ppc
ppc是for循环内的动态数组,循环结束后它还存在吗,和
“动态分配的数组将一直存在,直到程序显示释放它为止”有冲突吗
如果每一次的for循环是不是都重复创建了ppc,还是循环一次超出作用域后把它清除了

------解决方案--------------------
这个代码实际上是将多次分配的内存指针,存入一个组中(ppd)

在代码的最后,你应该循环遍历ppd,逐次释放每个指针
------解决方案--------------------
光释放p的话,循环内部的malloc创建的内存都泄露了,没有释放

释放p之前别忘了循环遍历释放
------解决方案--------------------
探讨

引用:
这个代码实际上是将多次分配的内存指针,存入一个组中(ppd)

在代码的最后,你应该循环遍历ppd,逐次释放每个指针

明白了,现在关键问题是搞不懂“ppc是for循环内的动态数组,循环结束后它还存在吗,和
“动态分配的数组将一直存在,直到程序显示释放它为止”有冲突吗
如果每一次的for循环是不是都重复创建了ppc,还是循环一次超出作……

------解决方案--------------------
ppc和ppc指向的内存是两回事。
ppc是局部变量出了块就被销毁了。
但ppc指向的内存是在堆中的。
不delete是一直存在知道进程结束为止。
你cout的时候ppc已经没有了,但它在创建时申请的内存地址你存到了ppd数组中。