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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2017, 14:02   #1
zdus2757
vk.com/replog
Пользователь
 
Регистрация: 04.05.2012
Сообщений: 87
По умолчанию XE10 и Delphi7

Всем привет, такая проблема, первый раз у меня заказали лабу сделать, я сделал, но я "пишу" на Embarcadero XE10, лабу же нужно на Delphi 7,
и вот я всё сделал, все работает, переписал всё на Delphi 7, всё тоже работает но с одной проблемой
Тут задача
если коротко:
на XE10 все нормально решается
на Delphi 7 же любая задача тоже решается, но если изменить кол-во критериев или кандидатов и нажать "решить" еще раз, то программа выдает ошибку что Access Violation т.е. где-то на пустоту иду, но почему тогда в XE10 все работает?
отладка ведет к строке SetLength но есть подзрение что проблема не в этом.
Если лезть в сам SetLength то ошибка тоже в самом начале push ebx

в чем прикол?
П.С. код думаю не надо, тут же телепаты сидят)
П.С.2. я пошутил, просто скажите в чем может быть проблема при переносе с XE на Delphi 7 и как можно "норм отладить"
zdus2757 вне форума Ответить с цитированием
Старый 05.10.2017, 14:33   #2
zdus2757
vk.com/replog
Пользователь
 
Регистрация: 04.05.2012
Сообщений: 87
По умолчанию

ну конечно же поторопился с вопросом, проблема решена, проблема в том что оказывается обращался за пределы массива.. хотя всеравно не понятно почему нет проблем в XE10 если обращался за пределы массива.... или может они по разному считают?
zdus2757 вне форума Ответить с цитированием
Старый 05.10.2017, 16:11   #3
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

zdus2757
Так как указателей в такой простой программе нет и быть не может. То остаётся выход индексной-переменной за пределы массива.
Еще часто новички вовсе забывают установить размер массива.
А с указателями там много всего.

Цитата:
Сообщение от zdus2757 Посмотреть сообщение
П.С.2. я пошутил, просто скажите в чем может быть проблема при переносе с XE на Delphi 7 и как можно "норм отладить"
Если бы отладка была простым делом то её уже бы автоматизировали. А так она тратит 90% времени и сродни искусству.

Цитата:
Сообщение от zdus2757 Посмотреть сообщение
еще раз, то программа выдает ошибку что Access Violation т.е. где-то на пустоту иду, но почему тогда в XE10 все работает?
Основной постулат тестирования гласит: "если программа проходит тестирование это не значит, что в ней нет ошибок".


Цитата:
Сообщение от zdus2757 Посмотреть сообщение
не понятно почему нет проблем в XE10 если обращался за пределы массива.... или может они по разному считают?
Считают, то они одинаково. А вот выделение памяти и положения данных отличается. А архитектура у ПК такая что код и данные лежат в общей памяти от того и проблемы с безопасностью. Что код становиться данными и наоборот.
https://ru.wikipedia.org/wiki/Переполнение_буфера
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 07.10.2017, 00:36   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,867
По умолчанию

Цитата:
Сообщение от zdus2757 Посмотреть сообщение
ну конечно же поторопился с вопросом, проблема решена, проблема в том что оказывается обращался за пределы массива.. хотя всеравно не понятно почему нет проблем в XE10 если обращался за пределы массива.... или может они по разному считают?
Проблемы есть и в ХЕ10 и в Д7. И вообще дело не в компиляторе. Реакция на обращение за пределы массива зависит от того, кому принадлежит та область памяти куда программа обращается при выходе за пределы массива. Ей самой или операционной системе. В первом случае никаких сообщений не выдаётся, но программа-то всё-таки работает неправильно! А во втором случае система слава богу выдает сообщение об AV. Так что вам повезло, что вы попробовали программу на Д7 и получили сигнал, который позволил вам найти ошибку в коде.
И кстати. Настоятельно советую вам включать опцию range-checking {$R+} при отладке программы. Уж по крайней мере выход за пределы массива вы увидите и без помощи случая.

Последний раз редактировалось northener; 07.10.2017 в 00:40.
northener вне форума Ответить с цитированием
Старый 25.10.2017, 07:27   #5
zdus2757
vk.com/replog
Пользователь
 
Регистрация: 04.05.2012
Сообщений: 87
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Настоятельно советую вам включать опцию range-checking {$R+} при отладке программы. Уж по крайней мере выход за пределы массива вы увидите и без помощи случая.
именно так я и узнал в чем проблема, это и был мой вопрос как "норм отладить"
но нашел сам, спасибо за ответ)
zdus2757 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скомпилил APK на Delphi XE10 ) beegl Общие вопросы Delphi 0 30.11.2016 23:40
Small size APK project - XE10 beegl Общие вопросы Delphi 3 11.11.2016 19:17
Synapse в XE10, пустые ответы zdus2757 Общие вопросы Delphi 5 08.04.2016 08:18
Стоит ли устанавливать Delphi xe10? Ernest027 Общие вопросы Delphi 11 05.03.2016 14:18
Embarcadero RAD Studio XE10 Seattle xxbesoxx Свободное общение 0 24.09.2015 21:43