Недопустимое чтение valgrind размера 4, где ошибка? - PullRequest
2 голосов
/ 02 октября 2010

Я новичок в valgrind и пытаюсь использовать его для утечек памяти и других проблем с памятью. В моей программе я определил следующий класс

class LM_EXPORT LdpElement : public Visitable, virtual public RefCounted,
                             public NodeInTree<LdpElement>
{
protected:
    ELdpElement m_type;     // the element type
    std::string m_name;     // for composite: element name
    std::string m_value;    // for simple: the element value
    bool m_fSimple;         // true for simple elements
    int m_numLine;          // file line in which the element starts or 0
    long m_id;              // for composite: element ID (0..n)
    ImoObj* m_pImo;

    LdpElement();

public:
    virtual ~LdpElement();

    //getters and setters
    ...
    inline ImoObj* get_imo() { return m_pImo; }

В этой последней строке Valgrind жалуется на «неверное чтение размера 4». Зачем? Где проблема с памятью при возврате указателя?

Ответы [ 2 ]

1 голос
/ 03 октября 2010

Возможно, m_pImo не инициализировано, и Вальгринду это не нравится? Есть ли у реализации вашего конструктора список инициализации, который инициализирует m_pImo?

0 голосов
/ 27 мая 2012

На самом высоком уровне, и не всегда причина, я видел, что иногда Valgrind будет жаловаться, когда в вашем конечном (отладочном) двоичном (исполняемом) файле содержится более одного символа (когда для параметра компоновщика установлено значение false для "удаления мертвого кода").

Я надеюсь, что это поможет другим в будущем. Я только что обнаружил это, потратив на это 2 часа. (

...