gpt4 book ai didi

C++返回本地分配的动态内存而不会泄漏?

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:14 25 4
gpt4 key购买 nike

我正在学校学习 C++ 并为作业创建一个字符串类。我有几个问题:

首先,下面会造成内存泄漏吗?

MyString operator() (int sliceStart, int sliceEnd) {
sliceStart = sliceStart%_len;
if(sliceStart < 0)
sliceStart = _len + sliceStart;
sliceEnd = sliceEnd%_len;
if(sliceEnd < 0)
sliceEnd = _len + sliceEnd;
char* temp = new char[_len + 1];

if(sliceStart == sliceEnd)
return *this;
int i;
if(sliceStart < sliceEnd)
for(i = 0; sliceStart < sliceEnd; ++sliceStart && ++i)
temp[i] = _str[sliceStart];
else if(sliceStart > sliceEnd) {
for(i = 0; sliceStart < _len; ++sliceStart && ++i)
temp[i] = _str[sliceStart];
for(int k = 0; k < sliceEnd; ++i && ++k)
temp[i] = _str[k];
}
temp[i] = '\0';
//delete [] temp
return MyString(temp);
}

如果是这样,添加注释删除行是否会返回一个有效值,因为它在返回之前就被释放了。还是两条线之间的内存有可能被抢走?

(我知道在这种特殊情况下我可以在返回之前简单地创建一个 MyString 对象,但我很好奇好像我必须返回临时字符)

管理您还希望按值返回的动态本地内存的常见/正确方法是什么?

最佳答案

是的 - 您的代码中存在内存泄漏,您分配了内存,然后可能会在下一行返回不同的值。

使用封装来帮助用户了解任何分配的生命周期;要么使用类似 std::shared_ptr 的东西,要么创建一个包装分配所有权的类。

关于C++返回本地分配的动态内存而不会泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16867945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com