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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2012, 00:50   #1
Zuba
Пользователь
 
Регистрация: 09.04.2012
Сообщений: 21
Восклицание Проблема с записью

Честно говоря вообще не понимаю в чём проблема, в гугле ничего не нашел про эту ошибку.
в общем после компиляции(компоновки) вылетает ошибка:
Project Project1.exe raised exeption class EAccessViolation with message 'Access violation at address 00402D49. Read of address 00000320'. Process stopped. Use Step or Run to continue.

Вообще не понимаю что от меня хочет компилятор
в общем это стало вылетать после добавления этого кода:
Код:
void __fastcall TForm2::N4Click(TObject *Sender)
{
TIniFile *Stat = new TIniFile(ExpandFileName("stat.ini"));
AnsiString f = Form1->LabeledEdit1->Text;
String km = Stat->ReadString(f,"kmil", "" );
StrToInt(km);
km=km+1;
Stat->WriteString(f,"kmil", km );
String mm = Stat->ReadString(f,"maxmil", "" );
StrToInt(mm);
if (rez>mm){
IntToStr(rez);
Stat->WriteString(f,"maxmil", rez ); }
String om = Stat->ReadString(f,"obshmil", "" );
StrToInt(om);
om = om+rez;
Stat->WriteString(f,"obshmil", om );
}
Извиняюсь, что за неделю создал тут десяток тем, просто диплом дело тяжкое и появляется куча всяких непоняток
Zuba вне форума Ответить с цитированием
Старый 04.05.2012, 07:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты можешь поставить точку прерывания на начало этого кода, пройтись по шагам и узнать на какой строке AV дает? Я лично криминеля тут не вижу...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.05.2012, 09:15   #3
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Цитата:
StrToInt(km);
km=km+1;
Вот эта запись неправильна. StrToInt возвращает в результате целое в случае, если строка km содержит символами цифры (или запись вида 0xC86E). Вы же решили, что такая запись трансформирует Вашу переменную String в переменную типа int и далее выполняете с ней арифметические операции. Правильно будет так: int A = StrToInt((String)str); A = A+1; str = IntToStr(A); (- это пример, не буквально); дальше я не смотрел,но... пишите код внимательнее.
nick42 вне форума Ответить с цитированием
Старый 04.05.2012, 09:25   #4
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Код:
StrToInt(km);
А кому присваивается результат ф-ции?

Код:
int res = StrToInt(km);
++res;
Stat->WriteString(f,"kmil", IntToStr(res));
 или
Stat->WriteInteger(f,"kmil", res);
Код:
if (rez>mm){
IntToStr(rez);
сравниваем строки? Какая строка больше?

Код:
om = om+rez;
Конкатенация строк?
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 05.05.2012, 11:01   #5
Zuba
Пользователь
 
Регистрация: 09.04.2012
Сообщений: 21
Вопрос

Цитата:
Сообщение от nick42 Посмотреть сообщение
Вот эта запись неправильна. StrToInt возвращает в результате целое в случае, если строка km содержит символами цифры (или запись вида 0xC86E). Вы же решили, что такая запись трансформирует Вашу переменную String в переменную типа int и далее выполняете с ней арифметические операции. Правильно будет так: int A = StrToInt((String)str); A = A+1; str = IntToStr(A); (- это пример, не буквально); дальше я не смотрел,но... пишите код внимательнее.
Я переделал программный код, но ничего не поменялось.
всё та же ошибка.
Код:
void __fastcall TForm2::N4Click(TObject *Sender)
{
TIniFile *Stat = new TIniFile(ExpandFileName("stat.ini"));
AnsiString f = Form1->LabeledEdit1->Text;
String km = Stat->ReadString(f,"kmil", "" );
int A = StrToInt((String)km);
A = A+1;
km = IntToStr(A);
Stat->WriteString(f,"kmil", km );

String mm = Stat->ReadString(f,"maxmil", "" );
int B = StrToInt((String)mm);
if (rez>B){
mm=IntToStr(rez);
Stat->WriteString(f,"maxmil", mm ); }

String om = Stat->ReadString(f,"obshmil", "" );
int C = StrToInt((String)om);
C = C+rez;
om = IntToStr(C);
Stat->WriteString(f,"obshmil", om );
}
Zuba вне форума Ответить с цитированием
Старый 05.05.2012, 11:33   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пошаговку делал? Трассирование по операторам...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.05.2012, 11:55   #7
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Код:
AnsiString f = Form1->LabeledEdit1->Text;
Попробуй заменить на String

Код:
String f = Form1->LabeledEdit1->Text;
А, то у тебя смешение типов строк.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 05.05.2012, 12:51   #8
Zuba
Пользователь
 
Регистрация: 09.04.2012
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Пошаговку делал? Трассирование по операторам...
Сделал. но мне, как студенту этого не понять) так что оно мне ничего не дало)

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Код:
AnsiString f = Form1->LabeledEdit1->Text;
Попробуй заменить на String

Код:
String f = Form1->LabeledEdit1->Text;
А, то у тебя смешение типов строк.
заменил, ничего не поменялось? всё тоже самое)

Последний раз редактировалось Stilet; 05.05.2012 в 19:15.
Zuba вне форума Ответить с цитированием
Старый 05.05.2012, 12:58   #9
Zuba
Пользователь
 
Регистрация: 09.04.2012
Сообщений: 21
По умолчанию

Всем спасибо, проблема решена.
у меня с другой формой бока были)
Zuba вне форума Ответить с цитированием
Старый 05.05.2012, 13:01   #10
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Цитата:
Project Project1.exe raised exeption class EAccessViolation with message 'Access violation at address 00402D49. Read of address 00000320'. Process stopped. Use Step or Run to continue
Когда выскочит это сообщение, нажми Break или F8, отладчик переместиться в то место, где был выброс исключения. А то мы так в телепатов будем играть до скончания веков. Или выкладывай в аттаче весь исходный код.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с учетной записью Mortimoro Операционные системы общие вопросы 2 11.07.2011 14:51
Проблема с записью на CD pavel42 Компьютерное железо 2 24.09.2009 16:33
Проблема с записью в файл baltushka Помощь студентам 0 14.06.2009 17:39
Проблема с записью в реест eks-s Общие вопросы Delphi 4 02.02.2008 13:42
Проблема с записью в файл...( Regloger Помощь студентам 10 15.11.2007 17:49