Valgrind не сообщает об утечке памяти при «удалении массива»
После реализации кода C ++, приведенного ниже, я запустилvalgrind --leak-check=full
чтобы проверить, не было ли утечки памяти. Результат был 0 байт были использованы на выходе а также утечки не возможны.
Однако позже я обнаружил, что забыл использоватьdelete[] x
вместо простоdelete x
внутри деструктора.
Я искал некоторые объяснения (например:ператоры @delete и delete [] в C ++) и все, что я прочитал, говорит, что используяdelete
без[]
может вызвать утечку памяти, поскольку вызывает только деструктор для первого объекта в массиве.
Я изменил код для удаления [], и вывод valgrind был таким же (как и ожидалось). Но теперь я в замешательстве: "Есть ли проблема с валгриндом или нет?&quodelete
действительно отлично работает для массивов даже без оператора[]
? "
#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;
}