2012-01-31 2 views
1

У меня есть массив из структур, которые я определил в заголовочном файле:Как изменить размер массива структур?

struct table { 
    otherStruct *list[16]; 
} 

Теперь я хочу, чтобы иметь возможность изменить размер массива, изменить размер массива, или динамически выделять массив, который может заменить (или присоединить) исходный список в «таблице» после выполнения условия. Как я могу выполнить эту задачу?

+1

Вам лучше использовать динамически распределенные массивы с самого начала. realloc() docs - ваш друг. –

+1

Нет, вы хотите написать функцию, чтобы сделать это. –

+0

, когда вы говорите, что используете «динамически распределенные массивы с самого начала», должен ли я malloc список otherStructs с самого начала в заголовочном файле в определении структуры? – mergesort

ответ

5

Сделать list в otherStruct **:

struct table { 
    otherStruct **list; 
} 

Теперь вы можете malloc это будет столь же большим, как вы хотите, и realloc по желанию.

+0

Быстрее и красивее, чем у меня, вы выигрываете :) –

+0

Это кажется очень разумным. Можно ли каким-либо образом включить переменную в список «otherStruct * [newVarHere]»; и сделать это с помощью этого метода? – mergesort

+0

@angrymonkey Нет, длина массива является частью его типа (и, следовательно, является частью типа структуры). Вы можете иметь фиксированный неизменный размер или использовать динамические размеры и malloc все. –

1

Измените массив на otherStruct ** и malloc на группу (otherStruct *) на новый размер вашего массива. Обязательно освободите его, так как это будет новый набор поверх ваших старых.

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