I happened a strange QList issue, QList can’t get correct list memeber as QList init problem.
in my application I write three class YDBCManager,YDBCMsg,YDBCSig(Ref code following:)
and use QList to save the class pointer , like QList <YDBCSig *> m_listSigs; QList <YDBCMsg *> m_listMsgs;
YDBCManager manange the QList <YDBCMsg *> m_listMsgs,
YDBCMsg manange QList <YDBCSig *> m_listSigs;
but application is crash cause QList <YDBCSig *> m_listSigs ,
after analysis I check the m_listSigs 的memery address ,I always can’t get correct memery QList <YDBCSig *> m_listSigs,
and m_listMsgs is OK , no problem, get correct memory
I use m_listSigs.append and m_listMsgs.append to add new class pointer into list
Now I don’t know how can I deal with this issue?
Any comment welcome
//// Refcode
#ifndef YDBCMSG_H
#define YDBCMSG_H
#include <QList>
#include <QString>
typedef struct _stuTIME_CYCLE{
int id;
int time;
}stuTIME_CYCLE;
//////////////////////////////
//class YDBCSig
//
//////////////////////////////
class YDBCSig
{
public:
YDBCSig(const QString & name, int pos,int len);
virtual ~YDBCSig();
void setSigName(const QString&str);
QString getSigName();
void setBitPos(int pos);
int getBitPos();
void setBitLength(int len);
int getBitLength();
void setSigValue(int v);
int getSigValue();
void setSigID(int id);
int getSigID();
private:
QString m_sigName;
int m_bitPos;
int m_bitLength;
int m_sigValue;
int m_sigID;
};
//////////////////////////////
//class YDBCMsg
//
//////////////////////////////
class YDBCMsg
{
public:
YDBCMsg(const QString &name,int id,int len);
virtual ~YDBCMsg();
unsigned char *getMsgFrame();
void add2list(YDBCSig * sig);
void setNodeName(const QString&str);
QString getNodeName();
void setMsgName(const QString&str);
QString getMsgName();
void setMsgID(int id);
int getMsgID();
void setMsgLen(int len);
int getMsgLen();
void setMsgCycleTime(int t);
int getMsgcycleTime();
void setSigValue(int pos,int len,int val);
private:
QString m_msgNode;
QString m_msgName;
int m_msgID;
int m_msgLength;
int m_msgCycleTime;
unsigned char m_msgData8;
public:
QList <YDBCSig *> m_listSigs;
stuTIME_CYCLE m_timecycle28;
};
//////////////////////////////
//class YDBCManager
//
//////////////////////////////
class YDBCManager
{
public:
YDBCManager(const QString &fn);
~YDBCManager();
bool file2msgs();
void setMsgLen(int len);
int getMsgLen();
void add2list(YDBCMsg* msg);
QList <YDBCMsg *> m_listMsgs;
protected:
bool trainLineStr(const QString &str);// how much signal
bool isMsgLine(const QString &line);
bool isSigLine(const QString&line);
bool readSigLine(const QString &line,QString &sig,int &pos,int &size);
bool readMsgLine(const QString &line,QString &msg,int &is, int len);
private:
int m_msgLen;
QString m_fileName;
};
#endif // YDBCMSG_H
↧