В бинарный файл в потоке записывается структура worker
struct worker{
QString wname;
QString wlastname;
int wsalary;
};
В момент чтения файла нужно в MessageBox вывести содержимое файла, в порядке убывания wsalary, т.е. нужно считать содержимое файла и отсортировать, сделал следующее решение
void MainWindow::on_ReadFilepushButton_clicked()
{
worker man;
QFile file (FName);
if(file.open(QIODevice::ReadOnly)){
QDataStream output(&file);
worker* mens = new worker;
worker temp;
QString s = "";
int stuctIterator = 0;
while(!output.atEnd()){
output >> man.wname >> man.wlastname >> man.wsalary;
stuctIterator++;
qDebug() << "1";
mens[stuctIterator].wname = man.wname; //Место сбоя
qDebug() << mens[stuctIterator].wname;
mens[stuctIterator].wlastname = man.wlastname;
qDebug() << mens[stuctIterator].wlastname;
mens[stuctIterator].wsalary = man.wsalary;
qDebug() << mens[stuctIterator].wsalary;
}
for (int i = 0; i < stuctIterator - 1; i++){
for (int j = 0; j < stuctIterator - i - 1; j++) {
if (mens[j].wsalary > mens[j + 1].wsalary){
temp = mens[j];
mens[j] = mens[j + 1];
mens[j + 1] = temp;
}
}
}
for (int i = 0; i < stuctIterator; i++){
s += QString::number(i + 1) + ") "
+ mens[i].wname + " "
+ mens[i].wlastname + " "
+ QString::number(mens[i].wsalary) + "\n";
}
delete mens;
file.close();
QMessageBox::about(this, FName, s);
} else
QMessageBox::critical(this, FName, "file does not exist");
}
Программа перестаёт отвечать в том месте где помечено место сбоя, ума не приложу в чем ошибка и как исправить
worker* mens = new worker;
worker temp;
QString s = "";
int stuctIterator = 0;
while(!output.atEnd()){
output >> man.wname >> man.wlastname >> man.wsalary;
stuctIterator++;
qDebug() << "1";
mens[stuctIterator].wname = man.wname; //Место сбоя
Обратите внимание: вы используете указатель mens
и выделяете динамически память под одно значение worker
. А затем используете его как массив - это уже не верно! Для начала, если вам нужен массив, то следует использовать new worker [n]
- именно new []
! Второе: какой размер массива должен быть? Тобишь нужно значение n
. Это значение должно быть таким, чтобы не произошел выход за пределы массива (тобишь выделенной памяти) - иначе проблемы гарантированы!
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть команда состоящая из нескольких частей: действие -> объекты над которыми действие совершается
На Form есть DataGridView (в нём показывается одна строка) и WebBrowser
пишу бинарное дерево и наткнулся на очень непонятную мне ошибку, вот пример: