コンストラクタとは異なるメンバクラスのポインタを初期化するときに、奇妙な(少なくとも私にとっては予期せぬ)動作(クラッシュ)の質問があります。 mainwindow.hでqtでコンストラクタの外側でnew演算子を呼び出すとクラッシュする
:私は私のコードの一部を添付しています
mainwindow.cppでclass MainWindow : public QMainWindow
{
...
private:
QPixmap *qpm_s1_yaw;
QPainter *s1_yaw_painter;
...
}
:
:実際に動作しますが、MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
...
initGraph(qpm_s1_yaw, s1_yaw_painter, ui->YAW1);
...
}
void MainWindow::initGraph(QPixmap *map, QPainter *painter, QLabel *label)
{
map = new QPixmap(label->size());
map->fill(Qt::white);
painter = new QPainter(map);
... doing some stuff ...
label->setPixmap(*map); // ++(Remember this LINE)++
}
を私は行をコメントするとき
label->setPixmap(*map)
代わりに、コンストラクタ(MainWindow :: MainWindow)にPixmapを設定します。
ui->YAW1->setPixmap(*qpm_s1_yaw)
セグメント違反が発生しました。
誰かが間違っていることを説明できますか? 、それは私が、コンストラクタ内のすべてのポインタを初期化しなければならなかった(とclasssメンバーinitGraphでこれらの行をコメント)動作させるために、次のように:
qpm_s1_yaw = new QPixmap(ui->YAW1->size());
s1_yaw_painter = new QPainter(qpm_s1_yaw);
initGraph(qpm_s1_yaw, s1_yaw_painter, ui->YAW1);
ui->YAW1->setPixmap(*qpm_s1_yaw);
おかげ
少なくとも、クラッシュのためにスタックトレースと、プログラム内のすべての関連変数の値を含める必要があります。 – MrEricSir