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

C++ conversion of string to char * which is then returned

本文关键字:然后 返回 char 字符串 转换      更新时间:2023-10-16

我正在在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()] = '';
   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对象的任何地方...这不好吗?这会创建内存泄漏吗?

简短答案:可能是。intToChar分配内存,然后将内存分配给field.value。如果没有delete[]field.value(直接或indireclty),则记忆被泄漏。

好吧,我看到代码同时使用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);

必须将每次使用newdelete的使用匹配。或在这种情况下,delete[]。因此,是的,如果缺少delete[],则记忆泄漏。

您不必释放field对象(在这种情况下是在堆栈上创建的,因此在相应的线程结束时通常会丢弃它),但是integerChar的内存,用new分配,必须在某个地方进行交易。