QDir::mkpath and QImage::save on msvc2010 Release Build



  • I am using Qdir mkpath(dir) and QImage::save to save .png images. But on release mode the program doesnt create some folders nor save images even though it does on debug. But it creates some of folders I wanted to create.

    And my code is here:

    @ bool check_dir(QString qsDir)
    {
    assert(!qsDir.isEmpty());
    QDir dir(qsDir);
    return dir.exists();
    }

    bool create_dir(QString qsDir)
    {
    QFileInfo fi(qsDir);

    /* absolute path is necessary since mkpath works weird otherwise (2 dirs are created instead of one) */
    if (fi.isRelative())
      qsDir = fi.absoluteFilePath();
    
    if (check_dir(qsDir))
      return true;
    
    QDir dir(qsDir);
    
    return dir.mkpath(qsDir);
    

    }@
    create_dir always return true.

    I am using Qt 4.8.2 for release qmain.lib, QtCore4.lib, QtGui4.lib and with qmaind.lib, QtCored4.lib, QtGuid4.lib on debug

    Could you please help me to fix this ?



  • Hi,

    Welcome to devnet,

    Kindly use "code wrapping":http://qt-project.org/wiki/ForumHelp#e3f82045ad0f480d3fb9e0ac2d58fb01 for your code, so that it is easily readable. Use @-tags for your code while posting.



  • I have found out what was wrong. If you are using assert you should drop NDEBUG from Release - Preprocessor options =)



  • Be aware that this is true for other debug instructions as well, like Q_ASSERT, Q_ASSERT_X and Q_CHECK_PTR, as they are removed in release builds (or more specifically when QT_NO_DEBUG is defined).

    Be sure to never place instructions within such macros that could cause any side-effects.
    @
    // WRONG, removed in release build, uninitialized ptr
    Q_CHECK_PTR(ptr = new char[size]);

    // RIGHT
    ptr = new char[size];
    Q_CHECK_PTR(ptr);
    @


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.