C 将字符串转换为char *,然后返回
C++ conversion of string to char * which is then returned
我正在在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);
但是我看不到他会释放integerChar
或field
对象的任何地方...这不好吗?这会创建内存泄漏吗?
简短答案:可能是。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);
必须将每次使用new
与delete
的使用匹配。或在这种情况下,delete[]
。因此,是的,如果缺少delete[]
,则记忆泄漏。
您不必释放field
对象(在这种情况下是在堆栈上创建的,因此在相应的线程结束时通常会丢弃它),但是integerChar
的内存,用new
分配,必须在某个地方进行交易。
相关文章:
- 文字符号和字符串变量之间的串联然后返回常量字符*
- C - 将浮子转换为未签名的char数组,然后返回到浮点
- C 将字符串转换为char *,然后返回
- 通过将结构信息从二进制文件读取到数组中,然后返回到文件C
- 将光标更改为沙漏/等待/忙碌光标,然后返回Qt
- 将枚举传递上课,然后返回
- 打开一个 Shell 程序,向其传递参数,然后返回结果
- 从Istream中阅读,如何先读一个单词,然后读整行,然后返回
- 将短*/双*转换为整数*,然后返回并取消引用
- 将 cout 写入文件,然后返回终端
- 将字符串拆分为字符,然后返回字符串
- 将字符串转换为Unicode十六进制表示形式,然后返回C++
- 在函数中定义一个动态数组,然后返回数组元素。如何释放阵列的内存?
- 使用MPI临时接收数据,然后返回结果
- 将焦点设置到父窗口,然后返回到子窗口
- 删除它,然后返回创建的对象
- 用数字填充数组,然后返回指向该数组的指针
- 提升精神:如何将值对字符串解析为map<string,string>然后返回?
- C++跟踪一个项目一次,然后返回
- 计算平均值,然后返回数组中最接近平均值的元素