C++11,内存泄漏
C++11 , leaking memory
我有一个案例 Xcode 的仪器检测到
std::vector<UserID_t> functions::getUserIds() const {
static_assert(sizeof(int64) == sizeof(uint64_t), "size is not matched");
auto object = AAAAA::BBBB::ValueObject<int64 *>(_hash->getValue((nByte)Key::USER_IDS));
auto size = object.getSizes();
std::vector<UserID_t> ret(*size);
auto pVal = object.getDataCopy();
for (int index = 0; index < *size; index++) {
ret[index] = *pVal;
++pVal;
}
return ret;
}
该工具显示 "ret" 中的元素在 return 之后未被释放。
但我认为 int64 是一个标量变量,我不需要释放它们。
是吗?
我用的是Xcode6.3.2
将 auto
与指针一起使用(假设它们是指针,而不是某些 class 带有重载的 *
运算符)会使事情变得混乱。我认为错误可能是因为您在 object.getDataCopy()
中创建了 "copy",return 指向它并且没有在 return 之前删除它 functions::getUserIds()
函数名.getSizes();暗示它 returns 一个大小数组?
或者这只是一个糟糕的 API 名称。
size
的实际类型是什么?
更新:在评论中发现罪魁祸首是 getDataCopy()
,它制作了一个深层副本,然后永远不会被释放。
我有一个案例 Xcode 的仪器检测到
std::vector<UserID_t> functions::getUserIds() const {
static_assert(sizeof(int64) == sizeof(uint64_t), "size is not matched");
auto object = AAAAA::BBBB::ValueObject<int64 *>(_hash->getValue((nByte)Key::USER_IDS));
auto size = object.getSizes();
std::vector<UserID_t> ret(*size);
auto pVal = object.getDataCopy();
for (int index = 0; index < *size; index++) {
ret[index] = *pVal;
++pVal;
}
return ret;
}
该工具显示 "ret" 中的元素在 return 之后未被释放。 但我认为 int64 是一个标量变量,我不需要释放它们。 是吗?
我用的是Xcode6.3.2
将 auto
与指针一起使用(假设它们是指针,而不是某些 class 带有重载的 *
运算符)会使事情变得混乱。我认为错误可能是因为您在 object.getDataCopy()
中创建了 "copy",return 指向它并且没有在 return 之前删除它 functions::getUserIds()
函数名.getSizes();暗示它 returns 一个大小数组?
或者这只是一个糟糕的 API 名称。
size
的实际类型是什么?
更新:在评论中发现罪魁祸首是 getDataCopy()
,它制作了一个深层副本,然后永远不会被释放。