2016-04-02 2 views
1

Я работаю над проблемой, когда у меня есть «главный массив» указателей на typedef struct programs. Для каждого элемента/структуры, которую я создаю, я выделяю память переменной programs* temp и сохраняю ее в массиве programs* master_array[x].C: Два разных массива, указывающих на ту же структуру

Однако моя проблема требует, чтобы я обрабатывал ошибки в master_array, где, если program переходит в «заблокированное» состояние, тогда мне нужно управлять этими процессами отдельно.

Я хочу создать второй массив под названием programs* blocked_array[y] и хранить программы, которые там блокируются. В этом случае я могу иметь два массива, указывающих на то же самое program. Однако, когда я закончил с обработкой program в заблокированном, как я могу освободить его/разыграть указатель blocked_array[y] на то, что program не влияет на указатель master_array[x]?

ли я создать пустой program temp, не выделяет память для этой temp программы и сделать blocked_array[y] точку в этой temp программы эффективно, выплескивать blocked_array?

Будет ли это создавать какие-то непреднамеренные последствия или делает это, чтобы остановить заблокированный массив от указаний на него, сохраняя указатель master_array[x]? Любые мысли помогут, спасибо.

+1

Имеют три отдельных списка: 'running',' runnable', 'blocked', где каждая программа может находиться только в * одном * списках одновременно. – EOF

+2

Вы можете добавить поле 'bool isBlocked;' в ваши 'struct programs'. –

ответ

1

Вы можете просто добавить bool isBlocked; поле в struct programs, а затем вы можете справиться с этим с помощью одного массива,

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

В качестве альтернативы, вы можете использовать другой массив для хранения «isBlocked» информация:

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

... 

isBlocked[x] = true; 

... 

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

@ sun qingyao - Спасибо qingyao, как бы удалить программу из заблокированного массива, когда я закончу? Должен ли я назначать что-то еще на своем месте, то есть другую пустую программу, которая не выделяет какую-либо память? – JJL

+0

@JJL Нет, не утруждайте себя удалением программ. Я хочу избежать использования двух 'массива программ *, поэтому в любом случае нет' block_array [] ' –

Смежные вопросы