Prosty przykład, tablica dynamiczna struktury o rozmiarze 2;
KOD cpp: UKRYJ
struct date_String
{
AnsiString name;
int age;
float salary;
};
date_String *my_record_String=new struct date_String[2];
my_record_String[0].name="John Rambo";
my_record_String[0].age=50;
my_record_String[0].salary=20101.76;
my_record_String[1].name="Don Johnson";
my_record_String[1].age=47;
my_record_String[1].salary=343431.23;
delete my_record_String;
{
AnsiString name;
int age;
float salary;
};
date_String *my_record_String=new struct date_String[2];
my_record_String[0].name="John Rambo";
my_record_String[0].age=50;
my_record_String[0].salary=20101.76;
my_record_String[1].name="Don Johnson";
my_record_String[1].age=47;
my_record_String[1].salary=343431.23;
delete my_record_String;
Kompiluje się ok, jednak uruchomienie zawiesza już system. Kluczem/powodem do wywalenie systemu jest użycie - delete.
Ta sama struktura z użyciem zamiast AnsiString UnicodeString zwykłego char* nie powoduje żadnych błędów wykonawczych.
KOD cpp: UKRYJ
struct Date
{
char *name;
int age;
float salary;
};
Date *my_Record=new struct Date[2];
...
delete my_Record;
{
char *name;
int age;
float salary;
};
Date *my_Record=new struct Date[2];
...
delete my_Record;
Z kolei nie ma też błędów w działaniu, gdy struktura dynamiczna, która posiada dane (AnsiString UnicodeString) będzie jednowymarowa, bądz będzie zadeklarowana statycznie:
KOD cpp: UKRYJ
date_String my_record_String[2];
my_record_String[0].name="John Rambo";
my_record_String[0].age=50;
my_record_String[0].salary=20101.76;
my_record_String[1].name="Don Johnson";
my_record_String[1].age=47;
my_record_String[1].salary=343431.23;
my_record_String[0].name="John Rambo";
my_record_String[0].age=50;
my_record_String[0].salary=20101.76;
my_record_String[1].name="Don Johnson";
my_record_String[1].age=47;
my_record_String[1].salary=343431.23;
Wychodzi na to, że para AnsiString UnicodeString nie powinna być za bardzo umieszczana w strukturach/rekordach gdzie występuję - delete