Valgrind não reporta vazamento de memória em "excluir matriz"
Depois de implementar o código C ++ abaixo, eu corrivalgrind --leak-check=full
para verificar se havia algum vazamento de memória. O resultado foi0 bytes estavam em uso na saída enão há vazamentos possíveis.
No entanto, mais tarde descobri que me esqueci de usardelete[] x
em vez de apenasdelete x
dentro do destruidor.
Eu procurei por algumas explicações (por exemplo:delete vs delete [] operadores em C ++), e tudo que li dizia que usardelete
sem[]
pode causar vazamento de memória, uma vez que chama apenas o destruidor do primeiro objeto na matriz.
Eu mudei o código para delete [] e a saída valgrind foi a mesma (como esperado). Mas agora estou confuso:"Existe um problema com valgrind, ou fazdelete
realmente funciona bem para matrizes, mesmo sem o operador[]
"
#include <iostream>
#include <string.h>
using namespace std;
class Foo {
private: char *x;
public:
Foo(const char* px) {
this->x = new char[strlen(px)+1];
strcpy(this->x, px);
}
~Foo() {
delete x;
}
void printInfo() { cout << "x: " << x << endl; }
};
int main() {
Foo *objfoo = new Foo("ABC123");
objfoo->printInfo();
delete objfoo;
return 0;
}