Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2009, 11:51   #1
kykysya
Пользователь
 
Регистрация: 16.11.2008
Сообщений: 32
Восклицание C++ Builder!!!

Здрастуйте, помогите решить проблему,я в программе использую встроенные функции, но при вызове этих функций в теле другой выбивает ошибку. Что это может быть???
kykysya вне форума Ответить с цитированием
Старый 06.02.2009, 12:24   #2
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

В теле чего-другой? Другой формы? Или в теле других функций? Давай проект выкладывай.
r9m вне форума Ответить с цитированием
Старый 06.02.2009, 16:22   #3
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Встроенные - это inline-функции. Код в студию.
MaTBeu вне форума Ответить с цитированием
Старый 06.02.2009, 17:32   #4
kykysya
Пользователь
 
Регистрация: 16.11.2008
Сообщений: 32
По умолчанию

В другой функции!!!Вот исходник!!!Не которые я уже поисправляла, но ещё остались!!Посмотрите пожалуста!!!


Модератор: код в атач не нужно выкладывать. Выложите текстом.
Вложения
Тип файла: zip puzzle.zip (106.2 Кб, 12 просмотров)

Последний раз редактировалось MaTBeu; 06.02.2009 в 20:56.
kykysya вне форума Ответить с цитированием
Старый 08.02.2009, 03:33   #5
Nomad-Hobbo
Новичок
Джуниор
 
Регистрация: 08.02.2009
Сообщений: 1
По умолчанию некоторые ошибки

1. В конструкторе формы создаётся
Код:
pic = new Graphics::TBitmap();
Однако, освобождения памяти нигде не происходит.
Чтобы программа не "текла памятью", самое простое написать в деструкторе формы
Код:
delete pic;
2. Массив pole определён как
Код:
byte pole [H][W];
Если развернуть макросы, получится
Код:
byte pole [4][4];
.
Однако, в методе TForm1::Mixer() есть такое присвоение:
Код:
pole[y1][x1]=pole[y2][x2];
При этом условие непосредственно перед этим выход из цикла do-while определён как
Код:
while ((x2<0)||(x2>=100)||(y2<0)||(y2>=200));
.
То есть, значение переменной x2 при выходе может лежать в диапазоне 0-100, а y2 -- 0-200.
Следовательно, строка
Код:
pole[y1][x1]=pole[y2][x2];
с вероятностью свыше 1194 к 1 производит присвоение из области за пределами массива!
Думаю, что ошибка здесь.
Извините, но пока этот баг не исправлен, дальше лень читать .


Советы:
1. Лучше разместить переменные в private разделе класса формы, по логике, это правильнее и безопаснее.

2. Везде, где это не принципиально, например, в циклах, пишите не i++, а ++i. Код будет быстрее.

3. Комментируйте код. Это очень помогает, особенно в двух случаях: при возврате к своему коду через месяц-другой и при работе в команде.

4. Пользуйтесь отступами в коде. Читать Ваш нынешний код изумительно трудно.

Последний раз редактировалось Nomad-Hobbo; 08.02.2009 в 04:07.
Nomad-Hobbo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Builder 6.0 prankish_cat Общие вопросы C/C++ 0 01.02.2009 16:45
БД в с++ builder Luna_13 Общие вопросы C/C++ 0 11.11.2008 14:44
БД C++ Builder 6 ZiKx C++ Builder 1 07.08.2008 20:43
С ++ Builder PsyTech C++ Builder 4 19.10.2007 08:25
C++ Builder ??? geniy C++ Builder 7 29.08.2007 20:16