Название: tablewidget->removeRow() из функции падает приложение Отправлено: Daywer от Март 25, 2017, 12:46 Уважаемы коллеги помогите пожалуйста. Стыдно задавать вопрос. Вроде просто все, а причину не могу понять.
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QTableWidget * tablewidget = new QTableWidget(centralWidget()); tablewidget->setGeometry(20,20,200,200); tablewidget->setRowCount(3); tablewidget->setColumnCount(3); for (int i=0;i!=3;i++) { tablewidget->setRowHeight(i,40); tablewidget->setColumnWidth(i,40); } DelRow(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::DelRow() { tablewidget->removeRow(2); } В таком виде приложение завершается с ошибкой. хотя сборка проходит без проблем. Но если выделеную красным цветом DelRow() заменить на tablewidget->removeRow(2); , то все работает. Вот и не могу понять в чем разница. Qt 5.8 Название: Re: tablewidget->removeRow() из функции падает приложение Отправлено: PimenS от Март 25, 2017, 16:47 Код: void Где объявление tablewidget? Название: Re: tablewidget->removeRow() из функции падает приложение Отправлено: Old от Март 25, 2017, 17:21 Код
И все заработает. Название: Re: tablewidget->removeRow() из функции падает приложение Отправлено: Daywer от Март 28, 2017, 10:24 Спасибо и правда работает. Чем вариант с указателем плох?
Название: Re: tablewidget->removeRow() из функции падает приложение Отправлено: gil9red от Март 28, 2017, 10:31 Спасибо и правда работает. Чем вариант с указателем плох? Судя по коду в DelRow, tablewidget у вас уже был объявлен полем класса, но не инициализирован В конструкторе вы создали новую переменную с именем tablewidget и переменная tablewidget в поле класса не была инициализирована, поэтому при вызове того метода, обращение было по не инициализированному указателю, что и вызвало падение (будь это на Java, то такая ошибка была бы названа Null Pointer Exception) Название: Re: tablewidget->removeRow() из функции падает приложение Отправлено: Daywer от Март 28, 2017, 10:37 Спасибо и правда работает. Чем вариант с указателем плох? Судя по коду в DelRow, tablewidget у вас уже был объявлен полем класса, но не инициализирован В конструкторе вы создали новую переменную с именем tablewidget и переменная tablewidget в поле класса не была инициализирована, поэтому при вызове того метода, обращение было по не инициализированному указателю, что и вызвало падение (будь это на Java, то такая ошибка была бы названа Null Pointer Exception) Премного благодарен. Учиться, учиться и еще раз учиться... |