C ++将字符串转换为char *,然后返回

时间:2014-03-12 12:41:04

标签: c++ string char

我正在用c ++做一些工作,并遇到了这段代码:

char* intToChar(RandomObject o) {
   string integerStr = to_string(o.toNumber());
   char * integerChar = new char[integerStr.size()+1];
   copy(integerStr.begin(), integerStr.end(), integerChar);
   integerChar[integerStr.size()] = '\0';
   return integerChar;
}

integerChar将返回并按如下方式分配:

struct Field {
   char *name;
   char *value;
};

std::vector<Field> rowData;

Field field;
field.name = i->key;
field.value = intToChar(i->value);
rowData.push_back(field);

但我不会在任何地方看到他会释放integerCharfield对象......这是不是很糟糕?这会造成内存泄漏吗?

4 个答案:

答案 0 :(得分:2)

简短回答:可能是的。 intToChar分配内存,然后将其分配给field.value。如果delete[]没有field.value(直接或间接),则会泄露内存。

答案 1 :(得分:1)

好吧,我发现代码同时使用string(是std::string)和char*,这对我来说很奇怪。坚持string并避免处理内存分配和释放。

string intToChar(int o) 
{
   return to_string(o.toNumber());
}

struct Field {
   std::string name;
   std::string value;
};

Field field;
field.name = i->key;
field.value = intToChar(i->value);
rowData.push_back(field);

答案 2 :(得分:0)

new的每次使用都必须与delete的使用相匹配。或者在这种情况下,delete[]。所以,是的,如果delete[]丢失,则内存泄露。

答案 3 :(得分:0)

您不必释放field对象(在这种情况下它是在堆栈上创建的,因此通常在相应的线程结束时将被丢弃)但是{{1}的内存用integerChar分配的,必须在某处解除分配。