C++ 将带有new的char*插入向量C++;
我有如下代码示例C++ 将带有new的char*插入向量C++;,c++,c-strings,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
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
}
std::vector vname列表//它将在全球范围内定义。。
int main(int argc,char*argv[])
{
CollectName();
对于(int i=0;i,只有在使用完指针之后,才可以通过删除指针来更正代码(假设您确实有使用指针的代码。您的示例代码根本不打印任何内容,垃圾或其他内容)
但是通常更好的设计是将字符串存储在std::string
中,并且当您将std::string
s存储在std::vector
中时,您不再需要手动管理内存。这是因为数组的名称在c++中被视为指针(或c,它是内置的)
所以当你这样做的时候
vNameList.push_back(Name);
它将char*
插入向量,即指向第一个char的指针(即字符串)指向向量,但随后删除指针,因此会得到垃圾值。但是,如果不删除指针,它会正常工作,因为指针仍然存在,但这种方式不会释放内存。因此:不要使用此
这是:
要避免这种麻烦:您应该使用
std::vector<std::string> vNameList;
std::vector vname列表;
相反。你的向量是空的。循环不应该运行。为什么要麻烦首先解决这个问题呢?std::vector
就可以了。在你的例子中,你在哪里调用CollectName
?伙计,你想在vector中保留指针,但之后你想删除它们的值。为什么?实际上,如果你正确删除了向量,你可以避免内存泄漏。“如果不删除指针,它工作正常”-只要找到另一个(可靠的)修复泄漏的方法。@AbhishekGupta-我已经检查过它,删除调用是命令,但这不会导致任何内存泄漏吗?我已经读到,每当使用新的时,它都应该被删除。@user987316您真的需要使用std::vector
?有什么好的理由不使用std::vector
?其他方面,您最好的选择是复制each逐个字符,然后使用delete