gpt4 book ai didi

c++ - 检查内存泄漏?

转载 作者:行者123 更新时间:2023-11-28 00:33:25 25 4
gpt4 key购买 nike

对于我的代码,expand就是把vector的容量加倍。它应该为动态分配的数组动态重新分配内存并更新容量值,同时不会造成内存泄漏。

我想知道您将如何检查内存泄漏,因为我的测试没有显示 Visual Studio 中的执行时间。

void IntVector::expand(){
cap = cap * 2;
int *data2;
data2 = data;
IntVector::~IntVector();
data = new int[cap];
data = data2;
delete data2;
}

header(我知道你不应该使用 namespace std)。

#ifndef INTVECTOR_H
#define INTVECTOR_H

using namespace std;
class IntVector{
private:
unsigned sz;
unsigned cap;
int *data;
public:
IntVector();
IntVector(unsigned size);
IntVector(unsigned size, int value);
unsigned size() const;
unsigned capacity() const;
bool empty() const;
const int & at (unsigned index) const;
const int & front() const;
const int & back() const;
~IntVector();
void expand();

};

#endif

主文件

#include "IntVector.h"
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;



IntVector::IntVector(){
sz = 0;
cap = 0;
data = NULL;
}

IntVector::IntVector(unsigned size){
sz = size;
cap = size;
data = new int[sz];
*data = 0;
}

IntVector::IntVector(unsigned size, int value){
sz = size;
cap = size;
data = new int[sz];
for(int i = 0; i < sz; i++){
data[i] = value;
}
}

unsigned IntVector::size() const{
return sz;
}

unsigned IntVector::capacity() const{
return cap;
}

bool IntVector::empty() const{
if(sz > 0){
return false;
}
else{
return true;
}
}

const int &IntVector::at(unsigned index) const{
if(index > sz){
exit(1);
}
else{
return data[index];
}
}

const int &IntVector::front() const{
return data[0];
}

const int &IntVector::back() const{
return data[sz];
}

IntVector::~IntVector(){
delete data;
}

void IntVector::expand(){
cap = cap * 2;
int *data2;
data2 = data;
IntVector::~IntVector();
data = new int[cap];
data = data2;
delete data2;
}

编辑:

void IntVector::expand(){
cap = cap * 2;
int *data2 = data;
data = new int[cap];
delete[] data2;
delete data2;
}

最佳答案

这两行:

data = new int[cap];
data = data2;

分配一个整数数组,然后立即覆盖指向它的指针,从而永远失去分配的内存。那是内存泄漏。

使用 valgrind 或类似工具应该很容易导致这些错误。

关于c++ - 检查内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21919170/

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