2016-04-02 14 views
1

ich auf einem Problem arbeite, wo ich ein „Master-Array“ von Zeigern auf ein typedef struct programs habe. Für jedes Element/I-Struktur, die zu erstellen, I zuzuteilen Speicher auf eine variable programs* temp und speichern sie in einem Array programs* master_array[x].C: Zwei verschiedene Arrays Unter Hinweis auf die gleiche Struct

Allerdings erfordert mein Problem mich, Fehler in der master_array zu behandeln, wo, wenn ein program in einen "blockierten" Zustand geht, dann muss ich diese (jene) Prozesse separat verwalten.

Ich möchte ein zweites Array programs* blocked_array[y] und Speichern von Programmen aufgerufen schaffen, die in dort blockiert werden. In diesem Fall kann ich zwei Arrays haben, die auf denselben program zeigen. Allerdings, wenn ich mit dem Umgang mit einem program in blockierter abgeschlossen, wie kann ich es freigeben/dereferenzieren die blocked_array[y] ‚s Zeiger auf diese program ohne die master_array[x] auswirken‘ s Zeiger?

erstelle ich eine leeres program temp, weist keinen Speicher zu diesem temp Programm und machen den blocked_array[y] Punkt zu diesem temp Programm effektiv, leeren blocked_array aus?

Würde dies eine unbeabsichtigte Konsequenz erzeugen oder würde dadurch das geblockte Array daran gehindert, darauf zu zeigen, während der Zeiger master_array[x] beibehalten wird? Irgendwelche Gedanken würden helfen, danke.

+1

haben drei separate Listen: 'running',' runnable', 'blocked', wo jedes Programm nur in * ein * der Listen zur gleichen Zeit sein kann. – EOF

+2

Sie können ein 'bool isBlocked;' - Feld in Ihren 'struct programs' hinzufügen. –

Antwort

1

Sie können einfach ein bool isBlocked; Feld in Ihrem struct programs hinzufügen und dann können Sie damit umgehen mit einem einzelnen Array von

if(master_array[x]->isBlocked) 
{ 
    // Do something 
} 
else 
{ 
    // Do something else 
} 

Alternativ können Sie auch ein anderes Array speichern können „isBlocked“ Informationen:

bool isBlocked[sizeof master_array/sizeof master_array[0]] = {0}; 

... 

isBlocked[x] = true; 

... 

if(isBlocked[x]) 
{ 
    // Do something 
} 
else 
{ 
    // Do something else 
} 
+0

@ Sonne Qingyao - Dank Qingyao, wie würde ich das Programm aus dem blockierten Array entfernen, wenn ich fertig bin? Sollte ich etwas anderes an seiner Stelle zuweisen, d. H. Ein anderes leeres Programm, dem kein Speicher zugewiesen ist? – JJL

+0

@JJL Nein, entfernen Sie die Programme nicht. Ich möchte die Verwendung von zwei 'Array von Programmen *' vermeiden, also gibt es in beiden Fällen kein 'blocked_array []' –

Verwandte Themen