Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Struktur von Struktur array an Funktion übergeben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.03.2023, 20:07 Uhr
WMW



Hallo,
Ich habe hier ein kleines Problem mit meinem Struktur array.
Ich übergebe die Adresse von der gewünschten Struktur an eine Funktion um sie zu befüllen.
Aber wie die Ausgabe zeigt, ist nachher der Zeiger im Strucktur array immer noch auf NULL
und der Eintrag ist auch nicht vorhanden.

Was mache ich falsch?
Danke für Hilfe.


C++:
#include <stdio.h>
#include <stdlib.h>
#include <console.h>

void Einfuegen(struct STRUCT_WOERTERBUCH *tWoerterbuch);
void Free(struct STRUCT_WOERTERBUCH **taWoerterbuch);

typedef struct STRUCT_WOERTERBUCH
{
    unsigned int uiLZW_Code;
    struct STRUCT_WOERTERBUCH *tWeiterer_Eintrag;
    
}STRUCT_WOERTERBUCH;


int main()
{
int iCounter1 = 0;
STRUCT_WOERTERBUCH **taWoerterbuch;
                
taWoerterbuch = (STRUCT_WOERTERBUCH**)malloc(10 * sizeof(*taWoerterbuch));

// init            
for(iCounter1=0;iCounter1 < 10;iCounter1++)
    taWoerterbuch[iCounter1] = NULL;
    
printf("taWoerterbuch[5] vorher:%p\n",taWoerterbuch[5]);

Einfuegen(&(*taWoerterbuch[5]));
            
            
printf("taWoerterbuch[5] nachher:%p\n",taWoerterbuch[5]);
printf("taWoerterbuch[5]->uiLZW_Code:%u\n",taWoerterbuch[5]->uiLZW_Code);

Free(&(*taWoerterbuch));

return(0);
}

void Einfuegen(struct STRUCT_WOERTERBUCH *tWoerterbuch)
{
int iCounter1 = 0;
STRUCT_WOERTERBUCH *tWoerterbuch_Temp = tWoerterbuch;
    
// letzten eintrag suchen und eintragen
while(tWoerterbuch != NULL)
    tWoerterbuch = tWoerterbuch->tWeiterer_Eintrag;
    
tWoerterbuch = (STRUCT_WOERTERBUCH*)malloc(sizeof(STRUCT_WOERTERBUCH));
        
tWoerterbuch->uiLZW_Code = 10;
    
if(tWoerterbuch_Temp != NULL)
    tWoerterbuch = tWoerterbuch_Temp;
}    

void Free(struct STRUCT_WOERTERBUCH **taWoerterbuch)
{
long lCounter1 = 0;

STRUCT_WOERTERBUCH *tWoerterbuch_Temp1 = NULL;
STRUCT_WOERTERBUCH *tWoerterbuch_Temp2 = NULL;
                
for(lCounter1=0;lCounter1 < 10;lCounter1++)
{
    tWoerterbuch_Temp1 = taWoerterbuch[lCounter1];
    
    while(tWoerterbuch_Temp1 != NULL)
    {    
        tWoerterbuch_Temp2 = tWoerterbuch_Temp1->tWeiterer_Eintrag;
        
        free(tWoerterbuch_Temp1);
        
        tWoerterbuch_Temp1 = tWoerterbuch_Temp2;
    }
}
}

/*

Ausgabe:

taWoerterbuch[5] vorher:00000000
taWoerterbuch[5] nachher:00000000
taWoerterbuch[5]->uiLZW_Code:65485

*/



Dieser Post wurde am 26.03.2024 um 15:13 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.03.2023, 21:00 Uhr
Helmut.Jakoby



Bitte den Source-Code formatieren, sind lese ich ihn nicht


C++:
#include <iostream>

int main() {
    std::cout << "Hello World!";
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.03.2023, 17:18 Uhr
ao

(Operator)


void Einfuegen(struct STRUCT_WOERTERBUCH *tWoerterbuch)

Eine Funktion mit dieser Signatur kann zwar intern neuen Speicher anlegen und befüllen (das machst du ja), aber sie kann den geänderten Zeiger nicht nach außen zurückreichen. Dazu wäre diese Signatur nötig:

void Einfuegen(struct STRUCT_WOERTERBUCH **tWoerterbuch)

Man kriegt bei diesen Pointereien leicht einen Knoten im Kopf. Musst du das mit C machen? Oder kannst du auch C++ nehmen? Das böte einige gedankliche Erleichterungen, und auch mehr Sicherheit.

taWoerterbuch = (STRUCT_WOERTERBUCH**)malloc(10 * sizeof(*taWoerterbuch));
Und wenn dieser Typecast (STRUCT_WOERTERBUCH**) nötig ist, um deinen Compiler glücklich zu machen, dann arbeitest du schon mit C++. Dann kannst du es auch richtig machen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: