2016-03-29 8 views
0

Angenommen Einstellung habe ich zwei structs verschiedenen Typen EX:verschiedene Strukturkomponenten zueinander gleich

typedef struct struct_A 
{ 
     int member_A1 
     char member_A2 
}STRUCT_A; 

typedef struct struct_B 
{ 
     int member_B1 
     char member_B2 
}STRUCT_B; 

und dann sind sie als

void struct_A_init(STRUCT_A *struct_A_pointer) 
{ 
     int i; 
     for(i=0; i<=10; i++) 
     { 
      struct_A_pointer[i].member_A1; 
      struct_A_pointer[i].member_A2; 
     } 

} 

void struct_B_init(STRUCT_B *struct_B_pointer) 
{ 
     int i; 
     for(i=0; i<=10; i++) 
     { 
      struct_B_pointer[i].member_B1; 
      struct_B_pointer[i].member_B2; 
     } 

} 

und dann global definiert und verwendeten anschließend initialisiert wie folgt

STRUCT_A struct_A_pointer[10]; 
    STRUCT_B struct_b_pointer[10]; 

some_function(types, types, types) 
{ 
    struct_A_pointer[0].member_A1 = struct_B_pointer[7].member_B1; 
} 

warum würde das nicht funktionieren, wenn die Mitglieder der dieselbe Art? Derzeit habe ich das gleiche Setup, und ich lade Werte in struct_B_pointer [7] .memberB1, und wenn ich das gleich struct_A_pointer [0] .member_A1 es erhält nur einen Wert von 0 nicht was ist eigentlich in struct_B_pointer, und Ich weiß nicht, warum das passieren würde, wenn die Mitglieder vom selben Typ sind. Darüber hinaus habe ich auch versucht, ein Dummy-Variable erstellen und versuchte, die folgenden

dummy_Var = struct_B_pointer[7].member_B1; 

    struct_A_pointer[0].member_A1 = dummy_Var; 

aber ich erhalte die gleichen Ergebnisse, irgendwie dachte ich, sich System mit diesem Trick könnte: p

Anregungen oder Kommentare sind sehr geschätzt

Dank

+0

Zeigt ein ganzes Programm an, das das Problem anzeigt. – FredK

+1

es ist zu lang, um die ganze Sache zu posten, das ist, was ich ursprünglich versucht habe, wurde mir gesagt, dass es zu viel Code ist, und nicht genug von meinen eigenen Worten – user6130096

+0

Ihre letzte Bearbeitung hat keinen Wert hinzugefügt. Das abstrakte Beispiel war soweit in Ordnung. Ich habe deshalb deine letzte Bearbeitung zurückgesetzt. – alk

Antwort

0

Diese

for(i=0; i<=10; i++) 
    { 
     struct_B_pointer[i].member_B1; 
     struct_B_pointer[i].member_B2; 
    } 

initialisiert nichts. Tatsächlich ist die ganze Schleife eine NOOP, die schließlich höchstwahrscheinlich ein undefiniertes Verhalten provoziert, indem sie auf das elfte Element zugreift, das hinter dem Array liegt.

Sie wollen mehr als 10 Elemente in einer Schleife nur und weisen etwas an die Mitglieder

for(i=0; i<10; i++) 
    { 
     struct_B_pointer[i].member_B1 = 42; 
     struct_B_pointer[i].member_B2 = 43; 
    } 

Mehr über Sie brauchen nicht explizit die Arrays initialisieren (auf Null) überhaupt, da der Compiler dies für Sie tut , wie sie global definiert sind.

+0

Ich sehe das, aber sie erhalten neue Werte unabhängig vom Code – user6130096

+0

@ user6130096: Sie möchten möglicherweise einen Debugger verwenden, der durch den Code geht, während die relevanten Variablen in den verschiedenen Phasen der Ausführung untersucht werden. – alk

+0

@ user6130096: Entfernen Sie auch alle diese Aufrufe von UB aufgrund der Indizierung der Arrays außerhalb der Grenzen. Nachdem UB aufgerufen wurde, können Sie dem Programm nicht mehr vertrauen. Alles könnte von da an passieren. – alk

Verwandte Themen