Witam
Piszę sobie programik który ma zamieniać systemy liczbowe. Mój “komplikator” to Borland C++ Builder 6 edycja Personal. System WIN XP SP3 Wszystko szło stosunkowo gładko, lecz poległem na głupim odwróceniu ciągu znaków. Oto problematyczny fragment kodu:
int dlug;
dlug=temp.Length();
for (int a=0;a!=dlug;a++)
{
wynik2[a]=temp[dlug-a];
}
gdzie wynik2 jest zmienną typu AnsiString, tak samo jak temp. Wszystko wydaje się proste, program nawet się kompiluje, lecz przy wykonaniu powyższego fragmentu wywala mi messageboxem : “Project Project1.exe raised exception class ERangeError with message ‘’. Process stopped. Use step or Run to continue.” Po kliknięciu “OK” przenosi mnie do pliku “dstring.h” i podświetla linijkę zaznaczoną strzałką.
char& __fastcall operator [](const int idx)
{
--> ThrowIfOutOfRange(idx); // Should Range-checking be optional to avoid overhead ??
Unique(); // Ensure we're not ref-counted
return Data[idx-1];
}
Gdy ją za komentuję podczas wykonywania programu wywala mi komunikat "Project “Project1.exe raised exception class EAccessViolation with message ‘ACCESS violation at adress 004019bc in module ‘Project1.exe’. Write of adress FFFFFFFF’. Process stopped. Use Step or Run to continue.”. Podświetla mi wtedy linijkę w programie
int dlug;
dlug=temp.Length();
for (int a=0;a!=dlug;a++)
{
--> wynik2[a]=temp[dlug-a];
}
Gdyby był potrzebny to podaję cały kod programu (domyślam się że trochę namieszałem :? )
#include
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
char ltz (int a)
{
switch (a)
{
case 0: return '0';break;
case 1: return '1';break;
case 2: return '2';break;
case 3: return '3';break;
case 4: return '4';break;
case 5: return '5';break;
case 6: return '6';break;
case 7: return '7';break;
case 8: return '8';break;
case 9: return '9';break;
case 10: return 'A';break;
case 11: return 'B';break;
case 12: return 'C';break;
case 13: return 'D';break;
case 14: return 'E';break;
case 15: return 'F';break;
}}
AnsiString inttox (int liczba, int system)
{
char wynik[100];
AnsiString wynik2;
int licznik=0;
while (liczba!=0)
{
wynik[licznik]=ltz((liczba%system));
liczba=liczba/system;
licznik++;
}
wynik[licznik]=NULL;
AnsiString temp=wynik;
int dlug;
dlug=temp.Length();
for (int a=0;a!=dlug;a++)
{
wynik2[a]=temp[dlug-a];
}
Form1->Edit3->Text=wynik2;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int a=StrToInt(Edit1->Text);
int b=StrToInt(Edit2->Text);
inttox(a,b);
}
//---------------------------------------------------------------------------