Important: Please read the Qt Code of Conduct -

[SOLVED]SIGSEGV QArrayData::deallocate(QArrayData*, unsigned int, unsigned int)

  • @QByteArray buffer; //declared as public in the header file

    void MyClass::run(){

        buffer = readData(); // On this line i get the SIGSEGV


    the method readData() return a QByteArray

    the backtrace is:

    ~"#0 0xb7fdd424 in __kernel_vsyscall ()\n"
    ~"#1 0xb6c011df in __GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64\n"
    ~"#2 0xb6c04825 in __GI_abort () at abort.c:91\n"
    ~"#3 0xb6c3e39a in __libc_message (do_abort=2, fmt=0xb6d39888 "*** glibc detected *** %s: %s: 0x%s **\n") at ../sysdeps/unix/sysv/linux/libc_fatal.c:201\n"
    ~"#4 0xb6c48ee2 in malloc_printerr (action=<optimized out>, str=<optimized out>, ptr=0xaeb5a2a8) at malloc.c:5039\n"
    ~"#5 0xb6f25eb5 in QArrayData::deallocate(QArrayData
    , unsigned int, unsigned int) () from /home/tizio/Qt5.1.1/5.1.1/gcc/lib/\n"
    ~"#6 0xb6f27cd0 in QByteArray::operator=(QByteArray const&) () from /home/tizio/Qt5.1.1/5.1.1/gcc/lib/\n"
    ~"#7 0x0806a68f in MyClass::run (this=0x81a20c0) at ../Project/myclass.cpp:60\n"
    ~"#8 0xb6f253a9 in ?? () from /home/tizio/Qt5.1.1/5.1.1/gcc/lib/\n"
    ~"#9 0xb6856d4c in start_thread (arg=0xafcfdb40) at pthread_create.c:308\n"
    ~"#10 0xb6cc2bae in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130\n"

    This error don't appears always, only sometimes

  • Moderators


    What does MyClass inherit?

    How did you implement readData()?

    How are you using your threads?

    I recommend reading "this page": for info about transferring data between threads. Also see "this page": for recommendations how to use threads.

  • 1 - MyClass inherits QThread.

    2 - i have a class Utility with the public method readData(), for this class i use the extern keyword : "extern Utility mUtility;"
    in the read data method i write the following code:

    @int iPlcConnResult = 0;

    QByteArray buff;

    unsigned char data = (unsigned char)malloc(length);

    iPlcConnResult = readBytes(conn, tipoArea, numDB, startAddress, length, data);

    bPlcConnError = (iPlcConnResult != 0);
    if (!bPlcConnError)
    buff = buff.setRawData((char*) data, length);
    sPlcConnError = "Error " + QString::number(iPlcConnResult) + " - " + daveStrerror(iPlcConnResult);

    return buff;@

    3 - i start the thread with myThread.start(QThread::HighestPriority);

  • Moderators


    There isn't enough code to know for sure what's the cause, but you really shouldn't be using malloc in C++. There are safer ways to allocate memory.

    Using C-style casts can be dangerous too. Use static_cast<> instead.


    • Where did you call free?
    • Is Utility thread-safe?

    Try this, instead of calling malloc and QByteArray::setRawData():
    // Create an heap-allocated array, filled with null bytes
    QByteArray buff(length, '\0');

    iPlcConnResult = readBytes(conn, tipoArea, numDB, startAddress,
    length, static_cast<unsigned char*>(;

  • I have been through with this same problem too. Thanks for the help!

Log in to reply