Всем бобра!
Второй день бьюсь с консольным приложением, пытаясь найти и искоренить странный глюк. Приложение должно запросить у пользователя два имени файлов, обработать первый из них и записать результаты во второй. Проблема состоит в том, что сразу после ввода первого имени файла программа вываливается в критическую ошибку "память не может быть written". Если закомментировать весь код, оставив только ввод имен файлов, то прорабатывают оба ввода и прога останавливается. Ничего понять не могу. Может, здесь кто поможет?
Код main.cpp:
#include <QtCore/QCoreApplication>
#include "cut-off_proc.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
printf("Enter name of file 1: ");
scanf("%s", ch1);
fileName1 = QString::fromAscii(ch1);
printf("Enter name of file 2: ");
scanf("%s", ch2);
fileName2 = QString::fromAscii(ch2);
/*file1.setFileName(fileName1);
if (file1.open(QIODevice::ReadOnly))
{
QTextStream t(&file1);
while (!t.atEnd())
{
str = t.readLine();
if ((str.section(" ", 0, 0).compare("#"))&&(!str.isEmpty()))
{
number = str.section(" ", 0, 0);
strCount = str.section(" ", 1, 1).toInt(&ok);
for (int i = 0; i < strCount; i++)
{
str = t.readLine();
if (!str.compare("fail"))
{
list1.clear();
list2.append(number+" fail");
break;
//вернуться в начало цикла while
}
if (!str.compare("restart"))
{
list1.clear();
break;
//вернуться в начало цикла while
}
list1.append(str.section(" ", 1, 1).toInt(&ok));
} //end of "for"
if (list1.isEmpty())
continue;
mainTimeMS = list1.at(list1.count()-1)-list1.at(0);
//calculating of time mm:ss.ms
int min=0, sec=0, msec=0;
QString min_s, sec_s, msec_s;
sec = mainTimeMS / 1000;
msec = mainTimeMS - sec * 1000;
min = sec / 60;
sec = sec - min * 60;
if (min < 10)
min_s = "0";
if (sec < 10)
sec_s = "0";
if (msec < 10)
msec_s = "0";
if (msec < 100)
msec_s.append("0");
min_s.append(QString::number(min));
sec_s.append(QString::number(sec));
msec_s.append(QString::number(msec));
mainTimeMSMS = min_s+":"+sec_s+"."+msec_s;
//end of calculating
list2.append(number+" "+mainTimeMSMS+" "+QString::number(mainTimeMS));
list1.clear();
} //end of "if"
}
file1.close();
}
else
printf("CRITICAL ERROR: Couldn't open file %s", fileName1.toAscii().data());
if (!list2.isEmpty())
{
file2.setFileName(fileName2);
if (file2.open(QIODevice::Append))
{
QTextStream t2(&file2);
for (int i = 0; i < list2.count(); i++)
{
printf("%s", list2.at(i).toAscii().data());
t2<<list2.at(i)<<"\n";
}
file2.close();
}
else
printf("CRITICAL ERROR: Couldn't open file %s", fileName2.toAscii().data());
}*/
return a.exec();
}
Код cut-off_proc.h:
#ifndef CUTOFF_PROC_H
#define CUTOFF_PROC_H
#endif // CUTOFF_PROC_H
#include <QFile>
#include <QTextStream>
#include <QString>
#include <QList>
#include <iostream>
QString str;
QString number, mainTimeMSMS;
int strCount, mainTimeMS;
bool ok;
QFile file1, file2;
QList<int> list1;
QList<QString> list2;
QString fileName1, fileName2;
char *ch1, *ch2;
Вот скрин ошибки:
Эскизы прикрепленных изображений