Seite 1 von 1

Erledigt: Fehler im Konstruktor?

Verfasst: 25. Januar 2014 20:04
von sigvdr
Mein Konstruktor macht Probleme, das Programm stürzt ab, und ich sehe keinen Grund.

Code: Alles auswählen

class QExifImageHeader
{
    Q_DISABLE_COPY(QExifImageHeader)
public:
    QExifImageHeader();
    explicit QExifImageHeader(const QString &fileName);
    explicit QExifImageHeader(QByteArray *exifData);
    ~QExifImageHeader();
    bool loadFromData(QByteArray *exifData);
   .... 
}

Code: Alles auswählen

QExifImageHeader::QExifImageHeader()
    : d( new QExifImageHeaderPrivate )
{
    d->byteOrder = QSysInfo::ByteOrder;
    d->size = -1;
}
/*!
    Constructs a new EXIF image data editor and reads the meta-data from a JPEG image with the given \a fileName.
    */
QExifImageHeader::QExifImageHeader(const QString &fileName)
    : d(new QExifImageHeaderPrivate)
{
    d->byteOrder = QSysInfo::ByteOrder;
    d->size = -1;
    loadFromJpeg(fileName);
}
/*!
    Constructs a new EXIF image data editor and reads the exif meta-data from a QByteArray.
    */
QExifImageHeader::QExifImageHeader(QByteArray *exifData){
    d->byteOrder = QSysInfo::ByteOrder;
    d->size = -1;
    loadFromData(exifData);
}

/*!
    Destroys an EXIF image data editor.
    */
QExifImageHeader::~QExifImageHeader()
{
    clear();
    delete d;
}

/*!
    Reads meta-data from a EXIF or META section of an JPEG image.
    Returns true if the data was successfully parsed and false otherwise.
    */
bool QExifImageHeader::loadFromData(QByteArray *exifData) {
    QBuffer buffer(exifData);
    readOk = buffer.open(QIODevice::ReadOnly) && read(&buffer);
    return readOk;
}
Der Code von QExifImageHeader stammt von Qt den ich (aus Git) als Quelltext vorliegen habe.
Den versuche ich etwas zu erweitern durch einen neuen Konstruktor und eine dazu passende Funktion.

Code: Alles auswählen

    explicit QExifImageHeader(QByteArray *exifData);
    bool loadFromData(QByteArray *exifData);
Jeder Versuch meinen Konstruktor aufzurufen scheitert. Das Programm crasht.

Code: Alles auswählen

QByteArray data = "a.dfjkjbjknjgnbjnb"; // inhalt beliebig
QExifImageHeader *exifHeader = new    QExifImageHeader(&data); 
Was aber geht ist

Code: Alles auswählen

QByteArray data = "gksgbkjjbkjnkajnbvk" // inhalt beliebig
QExifImageHeader exifHeader = new QExifImageHeader();
exifHeader->loadFromData(&data)
Kommt das durch Q_DISABLE_COPY(QExifImageHeader) ? Was genau macht denn das?


Gruß Sig

Re: Fehler im Konstruktor?

Verfasst: 25. Januar 2014 20:32
von sigvdr
Sorry Fehlalarm. Da habe ich doch glatt was übersehen.

Code: Alles auswählen

QExifImageHeader::QExifImageHeader(QByteArray *exifData)
     : d(new QExifImageHeaderPrivate)
{
    d->byteOrder = QSysInfo::ByteOrder;
    d->size = -1;
    loadFromData(exifData);
}
Es fehlte :d(new QExifImageHeaderPrivate)

Gruß Sig