I would like to have QMap as a part of class, so I add pointer to QMap in class private section, invoke a constructor of QMap in class constructor, and invoke destructor of QMap in class destructor. But if I invoke destructor of QMap, Segmentation fault is signaled. What do I wrong?

Qt Code:
  1. #include <QtCore/QCoreApplication>
  2. #include <QMap>
  3. #include <QMutableMapIterator>
  4.  
  5. class Segment
  6. {
  7. public:
  8. Segment(quint32 sourceIP, quint32 destinationIP,
  9. quint32 sequenceNumber,const unsigned char *segment)
  10. {
  11. qDebug("%s",Q_FUNC_INFO);
  12. srcIP=sourceIP;
  13. dstIP=destinationIP;
  14. seqNo=sequenceNumber;
  15. data=segment;
  16. };
  17. ~Segment()
  18. {
  19. qDebug("%s",Q_FUNC_INFO);
  20. };
  21. quint32 srcIP;
  22. quint32 dstIP;
  23. quint32 seqNo;
  24. private:
  25. const unsigned char *data;
  26. };
  27.  
  28. class Connection
  29. {
  30. public:
  31. Connection(quint32 sourceIP, quint32 destinationIP)
  32. {
  33. qDebug("%s",Q_FUNC_INFO);
  34. srcIP= sourceIP;
  35. dstIP= destinationIP;
  36. dstRCVMap= new QMap<quint32, Segment*>;
  37. };
  38. ~Connection()
  39. {
  40. qDebug("%s",Q_FUNC_INFO);
  41. QMutableMapIterator<quint32, Segment*> mapIter2(*dstRCVMap);
  42. while (mapIter2.hasNext()){
  43. Segment *segment= mapIter2.next().value();
  44. delete segment;
  45. mapIter2.remove();
  46. };
  47. delete dstRCVMap;//Problem
  48. qDebug("END OF %s",Q_FUNC_INFO);
  49. };
  50. void append(Segment *segment)
  51. {
  52. qDebug("%s",Q_FUNC_INFO);
  53. if (segment->srcIP==srcIP && segment->dstIP==dstIP)
  54. dstRCVMap->insert(segment->seqNo, segment);
  55. else
  56. delete segment;
  57. };
  58. private:
  59. quint32 srcIP;
  60. quint32 dstIP;
  61. QMap<quint32, Segment*> *dstRCVMap;
  62. };
  63.  
  64. int main(int argc, char *argv[])
  65. {
  66. QCoreApplication a(argc, argv);
  67. quint32 fakeIP1=123;
  68. quint32 fakeIP2=456;
  69. Connection con(fakeIP1,fakeIP2);
  70. const unsigned char rawSegment[20]={0};
  71. quint32 fakeSeqNo=1;
  72. con.append(new Segment(fakeIP1,fakeIP2,fakeSeqNo,rawSegment));
  73. // return a.exec();
  74. }
To copy to clipboard, switch view to plain text mode