Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / сбои в программе / 13 сообщений из 13, страница 1 из 1
18.06.2007, 19:20
    #34602909
Дональдак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
Вроде весь проект работает корректно, но при частом запуске за один сеанс некоторых функций теряются записи из структуры: пишется <null> вместо них, сносятся некоторые файлы, может вылететь программа или заголовки меню превращаются в набор всяких знаков.
подобные ошибки наблюдаются и паре других подобных функций, буду очень признателен за помощь! Вот одна из таких функций:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
struct patient
{
int id, del;
char surname[LENGTH], name[LENGTH], fathername[LENGTH];
};

struct timetable
{
char surname[LENGTH], name[LENGTH], fathername[LENGTH], speciality[LENGTH];
int number, start, finish, dt, patients[DAYS][MAX_PAT];
};

void Print_Timetable_Doctor(FILE *patients, FILE *time)
{
char str1[LENGTH], str2[LENGTH];
long position1, position2, end;
int i, j, limit, id, pos1= 0 , pos2;
timetable *tmp=new timetable;
patient *p=new patient;
fseek(patients, 0L,  2 ); end=ftell(patients);
printf("Enter speciality of doctor:\n");
scanf("%s", str1);
while(Check_Word(str1)== 0 )
{
printf("\nError!\n");
printf("Enter speciality of doctor:\n");
scanf("%s", str1);
}
printf("Enter surname of doctor:\n");
scanf("%s", str2);
while(Check_Word(str2)== 0 )
{
printf("\nError!\n");
printf("Enter surname of doctor:\n");
scanf("%s", str2);
}

position1=Find_Timetable(str1, str2, time);
if(position1==-1L) { printf("\nDoctor was not found!"); getch(); return; }
fseek(time, position1,  0 ); fread(tmp, sizeof(timetable),  1 , time);
clrscr();
printf("\n\n\tTimetable for current week.\n\n");
printf("%d: %s, %s\n\n", (tmp->number), (tmp->speciality), (tmp->surname));
limit=((tmp->finish)-(tmp->start))* 60 /(tmp->dt);

for(i= 0 ; i<DAYS; i++)
{
 gotoxy( 5 , Y+i+pos1); printf("day%d: ", i+ 1 ); pos2= 0 ;
 for(j= 0 ; j<limit; j++)
 {
 id=(tmp->patients[i][j]);
 position2=Find_Patient(patients, sizeof(int), end, id);
 gotoxy( 10 +pos2, Y+i+pos1);  pos2+= 5 ;
 if(position2==-1L) printf(" - ");
 else { fseek(patients, position2,  0 ); fread(p, sizeof(patient),  1 , patients);
	printf(" %d ", (p->id)); }
 }
  pos1++;
}
}
...
Рейтинг: 0 / 0
19.06.2007, 06:11
    #34603432
Дональдак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
Может переполняется буфер или дело в динамической памяти...
...
Рейтинг: 0 / 0
19.06.2007, 14:57
    #34605051
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
где пишется нулл вместо них? Попробуй удалить tmp и p, но вобще не в этом должно быть дело.
...
Рейтинг: 0 / 0
19.06.2007, 14:57
    #34605052
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
(попробуй удалять в конце функции)
...
Рейтинг: 0 / 0
19.06.2007, 16:06
    #34605355
Дональдак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
если вставить строчку
if(tmp==NULL) { printf("Error!"); getch(); return; }
то раза с 7 и вплоть до конца сеанса она и срабатывает.

поставил везде удаление, и размер увеличил до large. Вроде проблема исчезла (на 100% не уверен, но достаточное количество времени можно работать без сбоев).
...
Рейтинг: 0 / 0
19.06.2007, 16:18
    #34605410
Дональдак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
Забыл сказать:
компилятор borland c++: 3.1
...
Рейтинг: 0 / 0
19.06.2007, 16:19
    #34605422
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
Дональдакесли вставить строчку
if(tmp==NULL) { printf("Error!"); getch(); return; }
то раза с 7 и вплоть до конца сеанса она и срабатывает.так бывает, когда память заканчивается и new возвращает null
что значит «увеличил до large»?
...
Рейтинг: 0 / 0
19.06.2007, 16:20
    #34605423
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
теперь понятно, что значит large
...
Рейтинг: 0 / 0
20.06.2007, 09:58
    #34606740
Дональдак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
А почему память ограниченна таким маленьким объемом?
Это где-то устанавливается в настройках?
...
Рейтинг: 0 / 0
20.06.2007, 10:13
    #34606781
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
new есть, delete ни одного. И чему тут удивляться
...
Рейтинг: 0 / 0
20.06.2007, 10:20
    #34606800
pandrew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
ДональдакА почему память ограниченна таким маленьким объемом?
Это где-то устанавливается в настройках?В large модели тебе доступно 64K. Больше не получается адресовать 16 битным числом. Microsoft давно решило эту проблему, перейдя к 32 битному представлению. Однако, твой компилятор (borland c++: 3.1) не способен генерировать такой код.
Если освобождать ненужную память, можно выкрутиться.
Адресовать более 64К можно, используя huge указатели.
...
Рейтинг: 0 / 0
20.06.2007, 14:29
    #34607848
Дональдак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
Всем спасибо за ответы!
Надеюсь последний вопрос:
.exe файл скомпилированный при large модели, сохраняет эти свойства, даже если его запускать на другом компьютере, где компилятор настроен, например на small? т.е. на скомпилированный
.exe файл настройки текущего компилятора уже никак не влияют?
...
Рейтинг: 0 / 0
20.06.2007, 14:44
    #34607920
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сбои в программе
никак
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / сбои в программе / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]