Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как написать исключение? 000324EBF 
:(
    Опции темы
Ruka
Дата 24.5.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Прошу помочь!

При работе программы иногда появляется сообщение

Access violation at address 00324EBF in module 'vclx60.bpl'. Read of address 00000048

По всей видимости это говорит о каком-то сбое в данных, поступающих в программу. Где можно точно узнать, что эта ошибка обозначает. А главное - как написать исключение?

Спасибо!
PM MAIL   Вверх
Anikmar
Дата 24.5.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Откомпилируйте программу с включеным CodeGuard - может он найдет баг.


Цитата(Ruka @  24.5.2007,  11:56 Найти цитируемый пост)
А главное - как написать исключение?

Что вы имеете в виду под словом написать? Вызвать исключение или написать свой класс исключения? Или отловить исключение?


PM MAIL ICQ   Вверх
Fazil6
Дата 24.5.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



Цитата(Ruka @  24.5.2007,  11:56 Найти цитируемый пост)
Access violation at address 00324EBF in module 'vclx60.bpl'. Read of address 00000048

Скорее всего имеешь обращение через указатель к несуществующему объекту.
Что-нить типа
Код

TButton *b;
b->Caption = "Ok"; // Access violation at address ...
 
PM MAIL   Вверх
Klin
Дата 24.5.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Код

 TButton *b = new TButton(this);
 b->Parent = this;
 b->Caption = "Ok";


Добавлено через 2 минуты и 26 секунд
и подобным образом все объекты.

Цитата(Ruka @  24.5.2007,  12:56 Найти цитируемый пост)
Где можно точно узнать, что эта ошибка обозначает. 

ИМХО Ошибка означает, что по указанному адресу нет данных (или что-то вроде), в любом случае, если возникает какая-то ошибка следует выложить исходный код того действия, где эта ошибка происходит.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Voldemar2004
Дата 24.5.2007, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 1
Всего: 23



Может быть имелось в виду 
Код
try .... catch
 ?


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Klin
Дата 24.5.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Voldemar2004, без кода только гадать можно  smile 


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Ruka
Дата 25.5.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Спасибо всем, кто ответил на мой вопрос. 

В данном месте в программу поступают данные из другой программы по DDE. 


float ID;
char *k;
AnsiString K;

DdeClientItem1->DdeItem="Vv1";
 K = DdeClientItem1->Text;
 if (!TryStrToFloat(K,ID) || K==NULL)
  {
  K="обрыв";
  ID= 0.0;
  }
 k = K.c_str();
 Form2->Edit14->Text= K;


При этом программа, которая является сервером успешно выводит значения на экран компа. 




 

Это сообщение отредактировал(а) Ruka - 25.5.2007, 11:48
PM MAIL   Вверх
Klin
Дата 25.5.2007, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Ruka, а где конкрентно ошибка?

p.s. Пользуйтесь вкладкой "Код"


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Anikmar
Дата 25.5.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Мне видится проблема в этом участке:
Цитата(Ruka @  25.5.2007,  11:44 Найти цитируемый пост)
if (!TryStrToFloat(K,ID) || K==NULL)

Я не знаю, что делает функция TryStrToFloat, но ей может передаваться K == NULL - может на него ругается? Попробуйте сделать так:
Код

if (K!=NULL)
  if (!TryStrToFloat(K,ID))

PM MAIL ICQ   Вверх
Klin
Дата 25.5.2007, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Стоп, K == NULL быть не может (только если выполняется K = 0 или K = NULL), поэтому лучше так:
Код

. . . . . .
 if (K == "" || !TryStrToFloat(K,ID))
. . . . . .


а может и так:

Код

. . . . . .
 if ( !K || !TryStrToFloat(K,ID) )
. . . . . .


Возможно проблема в том, что неизвестен ID.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Anikmar
Дата 25.5.2007, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Klin, А разве порядок проверки аргументов в if зависит от их порядка написания? Я всегда считал, что это не регламентировано...

Добавлено через 57 секунд
Цитата(Klin @  25.5.2007,  22:03 Найти цитируемый пост)
Стоп, K == NULL быть не может

Ну да, это я ступил...
PM MAIL ICQ   Вверх
Klin
Дата 25.5.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(Anikmar @  25.5.2007,  23:44 Найти цитируемый пост)
 Я всегда считал, что это не регламентировано...

Я сам точно не знаю, но имхо два процесса не могут быть совершенны одновременно. По логике, если одна часть условия не подходит. то зачем проверять другую? Врочем, точно сказать не могу.


Цитата(Anikmar @  25.5.2007,  23:44 Найти цитируемый пост)
Ну да, это я ступил...

Ну не совсем твоя  smile 


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Anikmar
Дата 25.5.2007, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Klin @  25.5.2007,  22:57 Найти цитируемый пост)
Я сам точно не знаю, но имхо два процесса не могут быть совершенны одновременно. По логике, если одна часть условия не подходит. то зачем проверять другую? Врочем, точно сказать не могу.

Я где-то читал, что это зависит от компилятора и его оптимизатора - т.е. первое проверяемое условие может быть любым, вне зависимости от порядка написания их в скобках. Но может это не так - врать не буду в стандарт по этому поводу не смотрел. А то, что остальные условия не проверяются - это само собой.
Лично я, во избежание неприятностей делаю ступенчатый if - от греха подальше


PM MAIL ICQ   Вверх
Klin
Дата 25.5.2007, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Anikmar, я был прав smile Достаточно провести исследование. И все как я сказал, подчиняется законам логики:

1) Если в общем условии "И" и первое условие равно ЛОЖЬ, то все последующие условия - не проверяются
2) Если в общем условии "ИЛИ" и первое условие является верным (ИСТИНА), то все последующие условия - не проверяются
3) В иных случаях проверяются остальные условия.

Код

 int k = 0;
. . . . .
 if (3 != 2 || 10/k == 2);
. . . . .
 if (3 == 2 || 10/k == 2);
. . . . .
 if (3 != 2 && 10/k == 2);
. . . . .
 if (3 == 2 && 10/k == 2);


Все условия проводить в разных действиях. Если программа в процессе выдает ошибку, значит идет проверка обеих условий. Переменную вводить обязательно, т.к. деление на 0 компилятор в процессе компиляции исправляет.

Добавлено через 1 минуту и 37 секунд
сорри за оффтоп smile


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
dumb
Дата 26.5.2007, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



можно было так не напрягаться... smile во всех нормальных компиляторах есть настройка, отвечающая за полное или неполное вычисление логических условий.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.