?
Erstmal Danke für eure, und speziell deine Hile akari.
Ich hae den Debugger mal durchlaufen lassen. Es passiert bei z.B. bei dem dritten Arrayverweis.
void __fastcall TForm_Main::FillComboBoxPannelCheckBoxList(
PARAMETER_TREE* pNodeData)
{
// Funktionsvariablen
char** cNodeValue;
int i;
int j;
int iParameter;
unsigned int uiIndex;
unsigned int uiIndexArray;
unsigned int uiIndexPosition;
AnsiString asParameterValue;
// Datenstruktur aus Knoten separieren
cNodeValue = (char**)pNodeData->Data;
// Zeigerarray für Adressen der Checkbox-Elemente
TCheckBox * CB_Parameters[] =
{
(TCheckBox*)CB_Parameter1, (TCheckBox*)CB_Parameter2,
(TCheckBox*)CB_Parameter3, (TCheckBox*)CB_Parameter4,
(TCheckBox*)CB_Parameter5, (TCheckBox*)CB_Parameter6,
(TCheckBox*)CB_Parameter7, (TCheckBox*)CB_Parameter8,
(TCheckBox*)CB_Parameter9, (TCheckBox*)CB_Parameter10,
(TCheckBox*)CB_Parameter11, (TCheckBox*)CB_Parameter12
};
// Prüfung ob der Knoten aktiv ist
if (!pNodeData->bActiv || !bEditMode) {
// Sollte der Knoten nicht aktive sein, werden die Checkbox-Elemenete
// deaktiviert
for (i = 0; i < 12 ; i++) {
CB_Parameters[i]->Enabled = false;
CB_Parameters[i]->Visible = false;
}
} else {
// Sollte dar Knotan aktiv sein wird das Eingabefeld aktiviert
for (i = 0; i < 12 ; i++)
{
CB_Parameters[i]->Enabled = true;
CB_Parameters[i]->Visible = false;
}
}
// Rücksetzen der Laufvariablen
i = 0;
j = 0;
// Sollte keine Adresse oder kein Wert in der Datenstruktur des Knotens
// entahlten sein, kann kein Wert eingetragen werden
if (cNodeValue != NULL && *cNodeValue != NULL)
{
while (*cNodeValue != NULL)
{
// Sollte Eintrag eine Parameternummer sein...
if (TryStrToInt(*cNodeValue, iParameter)) {
// Berechnung der Positionen des Bits in der Datenstruktur
CalculateBitPosition(&uiIndex, &uiIndexArray, &uiIndexPosition,
*cNodeValue);
// Filtern des Parameterwerts
asParameterValue = (AnsiString)GetBitInWordArray(uiIndexPosition,
&DataSet.FSCDataIntel.BOOLDataArr[uiIndexArray]);
// Bei der nachfolgenden Zeile Tritt der Fehler auf!!!!!!!!!!!!!!!!!!
// Darstellung des Parameterswerts
CB_Parameters[i]->Checked = StrToBool(asParameterValue) ;
// Paramterdarstellung sichtbar machen
CB_Parameters[i]->Visible = true;
// Indexvariable erhöhen
i++;
} else {
// Sollte Eintrag ein Parameterwert verkörper...
// Beschriften des Checkbox-Elements
CB_Parameters[j]->Caption = ValueText.getXMLValue(
"ParameterValue", *cNodeValue, *cNodeValue);
// Indexvariable erhöhen
j++;
}
// Zeiger auf Dateneintrag erhöhen
cNodeValue++;
}
}
}
Im Qulltext habe ich einen Kommentar bei der Zeile hinterlegt.
Die Methoed ist ein Teil einer Klasse des Hauptformulars im Programm.
Normalerweise, sollte das Array mit den Adressverweisen (Zeiger) nur eine Gültigkeit in der Methode haben und danach nicht interessieren. Die Instanzierung der CheckBox-Objekte im Formular wird schon bei dem Programmstart durchgeührt. Ja, es timmt, dass die Objkte selber bei der Instanzierung durch einen Zeiger des Typs dargestellt werden.
Dennoch verstehe ich noch nicht, warum der Fehler auftritt?
Akari, kannst du mir helfen? Oder hat sonst noch jemand einen Vorschlag?
Ich wäre euch sehr dankbar. Vielleicht gibt es ja auch eine andere Möglichkeit für die Realisierung der Aufgabenstellung der Methode.