C++ 我有内存泄漏吗?
C++ Do I have memory leak?
istream& operator>>(istream& in,hhh& hh){
double *arr,*temp;
int i=0;
char c;
c=in.peek();
while(c!='n'){
if(i>=1){
temp=new double[++i];
for(int j=0;j<i-1;j++){
temp[j]=arr[j];
}
arr=temp;
}
else {
arr=new double[++i];
}
in>>arr[i-1];
c=in.peek();
}
hh.set(arr,i);
delete [] arr;
return in;
}
我有内存泄漏吗?我试图弄清楚我是否有,但我不确定,谢谢你的帮助。
是的,你有。
创建较大的阵列时,不会删除较小的阵列。
double* arr = 0;
int size = 0;
for (char c = in.peek(); c != 'n'; c = in.peek()) {
double* temp = new double[++size];
// memcpy(temp, arr, (size - 1) * sizeof(double));
for (int i = 0; i != size - 1; ++i){
temp[i] = arr[i];
}
delete [] arr;
arr = temp;
in >> arr[i-1];
}
或者更好的是,使用 std::vector
std::vector<double> arr;
for (char c = in.peek(); c != 'n'; c = in.peek()) {
double d;
in >> d;
arr.push_back(d);
}
是的,你愿意。在赋值arr=temp;
中,您可以覆盖旧指针而不释放它。我建议不要使用原始指针。请改用std::unique_ptr< double[] >
来包装指针。它将保证您不会泄漏。
例:
std::unique_ptr< double[] > arr, temp;
arr.reset( new double[++i] ); // in C++14 you would use std::make_unique instead
相关文章:
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存