powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / сбои в программе
13 сообщений из 13, страница 1 из 1
сбои в программе
    #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
сбои в программе
    #34603432
Дональдак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может переполняется буфер или дело в динамической памяти...
...
Рейтинг: 0 / 0
сбои в программе
    #34605051
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где пишется нулл вместо них? Попробуй удалить tmp и p, но вобще не в этом должно быть дело.
...
Рейтинг: 0 / 0
сбои в программе
    #34605052
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(попробуй удалять в конце функции)
...
Рейтинг: 0 / 0
сбои в программе
    #34605355
Дональдак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если вставить строчку
if(tmp==NULL) { printf("Error!"); getch(); return; }
то раза с 7 и вплоть до конца сеанса она и срабатывает.

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


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