私はC++とCSの方が一般的です。メモリリークを完全に防止する方法を理解できない。 私は、shapeという抽象クラスを持っており、抽象クラスを使ってポインタを設定しています。しかし、私は、ポインタを削除しようとすると、私はまだメモリリークを見つける。 valgrindのを確認した場合、私は抽象クラスからポインタを削除するには
==14227== HEAP SUMMARY:
==14227== in use at exit: 72,704 bytes in 1 blocks
==14227== total heap usage: 3 allocs, 2 frees, 73,760 bytes allocated
==14227==
==14227== LEAK SUMMARY:
==14227== definitely lost: 0 bytes in 0 blocks
==14227== indirectly lost: 0 bytes in 0 blocks
==14227== possibly lost: 0 bytes in 0 blocks
==14227== still reachable: 72,704 bytes in 1 blocks
==14227== suppressed: 0 bytes in 0 blocks
==14227== Rerun with --leak-check=full to see details of leaked memory
==14227==
shape.hpp
class Shape
{
protected:
int sides;
int length;
int width
public:
virtual int perimeter() = 0;
virtual int area() = 0;
virtual ~Shape(){}
};
rectangle.hpp
class Rectangle : public Shape
{
public:
Rectangle();
virtual int perimeter();
virtual int area();
void setLength(int);
void setWidth(int);
int getLength();
};
rectangle.cpp
Rectangle::Rectangle()
{
setLength(2);
setWidth(5);
}
void Rectangle::setLength(int l)
{length = l;}
void Rectangle::setWidth(int w)
{width = w}
int Rectangle::perimeter()
{enter code here}
int Rectangle::area()
{enter code here}
int Rectangle::getLength()
{return length;}
main.cppにこのメッセージが表示されます
Shape *s1;
int main()
{
s1 = new Rectangle();
cout << "Length: " << s1->getLength() << endl;
delete s1;
return 0;
}
私は分かりませんが、それは偽陽性ではありませんか? s1ポインタをメイン関数に移動するか、明示的に0に設定してください。 – Lorenz
Valgrindのメッセージに、メモリリークが検出されなかったことが明示的に記載されています。 – Justin
0バイトが失われています。 「まだ到達可能」は、ヒープサマリに対応しています。 – Pyves