首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这里动态分配的内存在哪释放,是否造成内存泄露

2012-09-07 
请指教这里动态分配的内存在哪释放,是否造成内存泄露!c++ primer的习题4.34.。问题用红色字体表示代码:stri

请指教这里动态分配的内存在哪释放,是否造成内存泄露!
c++ primer的习题4.34.。
问题用红色字体表示
代码:
  string word;
  vector<string> vect;
  while(cin >> word)
  {
  vect.push_back(word);
  }

  char **arr= new char*[vect.size()];
  size_t ix = 0;

  for(vector<string>::iterator iter = vect.begin();iter != vect.end();iter++,ix++)
  {
  char *p = new char[(*iter).size()+1];
  strcpy(p,(*iter).c_str());
  arr[ix] = p;
  // delete [] p;这里不能释放p的内存。。我自己写的时候在这里把new出来的内存都释放了,运行的时候发生了错误,在下面输出的时候不是我输入的字符串。参考了答案,不能把p释放掉。这也能想通。p指向的内存写的是字符串,如果释放了,存的这些东西就保不住了。但是,我在想,这样的话p指向的内存不是造成内存泄露了吗?求教。。是不是会发生内存泄露。如果是,应该怎么办?
  }

  cout << endl << endl << "what input :" << endl;
  for(size_t j = 0;j<vect.size();j++)
  {
  cout << arr[j] << endl;
  delete [] arr[j];
  }

  delete [] arr;

[解决办法]
delete [] arr[j];

这里已经释放了
[解决办法]
不会的

delete [] arr[j];这里已经释放了
[解决办法]
arr[ix] = p; 之后,p所指向的动态内存就交给arr[ix]管理了,如果后面没有 delete [] arr[j];
操作,就会造成内存泄露。
 
[解决办法]
delete [] p;//动态分配的空间没了,下面打印肯定出错了
delete [] p == delete [] arr[j];
在打印之后delete,就没有问题了
delete [] arr[j]对应的是char *p = new char[(*iter).size()+1]
delete [] arr对应的是char **arr= new char*[vect.size()]

热点排行