سؤال

أحاول تجميع تطبيق Qt 4 الذي يحتوي على استدعاء QProcess.

لا توجد مشكلة في تجميعه كإصدار إصدار، لكنني دائمًا أحصل على خطأ SegmentionFault عندما أقوم بتنفيذ إصدار Debug.

إصدار Qt الخاص بي هو 4.8.2 وقد جربته على نظامي التشغيل Fedora وDebian OS.

هل واجه أحدكم مشاكل مماثلة من قبل؟لا أستطيع معرفة ذلك!

#include <QApplication>
#include "mainwindow.h"
#include <QProcess>

class MyApplication : public QApplication{
public:
    QProcess * proc;
    MyApplication(int argc, char** argv) : QApplication(argc, argv){
        proc = new QProcess();
    }
};

int main(int argc, char *argv[])
{
    MyApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

أتمنى لك يومًا سعيدًا يا ماركوس

هل كانت مفيدة؟

المحلول

سبب العطل هو هذا الخط:

MyApplication(int argc, char **argv);

يجب عليك تعديله إلى:

MyApplication(int &argc, char **argv);

والسبب هو أنه، بدون مرجع، توجد نسخة مؤقتة مضمنة يتم إتلافها بشكل أساسي، بينما لا يزال عنوانها مخزنًا.يحدث العطل عند الوصول بعد ذلك.

انظر التحذير في الوثائق التابع QApplication البناء:

تحذير:يجب أن تظل البيانات المشار إليها بواسطة argc وargv صالحة طوال عمر كائن QCoreApplication.بالإضافة إلى ذلك، يجب أن يكون argc أكبر من الصفر ويجب أن يحتوي argv على سلسلة أحرف صالحة واحدة على الأقل.

ومع ذلك، ربما لا يستحق التصنيف الفرعي QApplication في حالتك.حتى لو قمت بذلك، تأكد من عدم تسريب الذاكرة من خلال عدم حذف كائن الكومة الذي تم إنشاؤه للتعامل مع عملية الخلفية QProcess.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top