将char * with new插入到向量C ++中

时间:2015-01-05 14:07:35

标签: c++ c-strings

我有以下代码示例..

std::vector<char*> vNameList;//it will be defined globally..



int main(int argc, char* argv[])
{
CollectName();
  for(int i = 0; i<(int)vNameList.size(); i++)
  {
    printf("\n %s" , vNameList[i]);//Here gabage values are getting printed on console
  }
  return 0;
}

void CollectName()
{
   char *Name = new char[sizeof(NAME)+1];//NAME datatype is defined having size of 32 char

   //processing for Name is performed , which includes assigning Name variable with value..

   //now insert it into vector
   vNameList.push_back(Name);

   delete[] Name; //at this Name value inserted into vector become garbage
}

我相信如果我们用new初始化char *,必须删除它以避免内存泄漏。但这导致修改矢量值。

请引导我,以便我可以更正我的代码,这将给我正确的价值。

我有一些限制只使用Char *,因此建议使用char *来实现此目的。

2 个答案:

答案 0 :(得分:1)

您可以通过在完成之后删除指针来更正代码(假设您实际上有使用指针的代码。您的示例代码根本不打印任何内容,垃圾或者其他)。

但通常更好的设计是在std::string中存储字符串,当您将std::string存储在std::vector中时,您不再需要手动管理内存。

答案 1 :(得分:1)

这是因为数组的名称在c ++中被视为指针(或c,它是无意义的)。

因此当你这样做时

vNameList.push_back(Name);

它将char *插入到向量中,即指向第一个字符(因此是字符串)到向量的指针,但是之后删除指针,因此得到垃圾值。但是,如果你不删除指针,它就可以正常工作,因为指针仍然存在,但这样你就不会释放内存。因此:不要使用

这里是:LIVE EXAMPLE

为避免这种麻烦:您应该使用

std::vector<std::string> vNameList;

代替。