nixp.ru v3.0

24 октября 2017,
вторник,
06:56:59 MSK

DevOps с компанией «Флант»
ttnl написал 15 августа 2006 года в 12:18 (422 просмотра) Ведет себя неопределенно; открыл 2 темы в форуме, оставил 1 комментарий на сайте.

Мне нужно выделить память под массив структур, размер которого заранее не известен.

Размер массива увеличивается в процессе работы программы.

Размещает ли функция malloc массив как единый участок в памяти? Может ли возникнуть

следующая ситуация: realloc’у, увеличивая размеры этого участка, не удалось найти места,

чтобы поместить массив как единое целое (память фрагментирована?), и программа

завершилась с ошибкой?

Может быть лучше использовать список:

struct data

{

struct data *next;

struct data *prev;

};

По собственным ощущениям. Со списком ничего подобного случится не может,

но хочется сделать проще.

Feuerbach
ttnl
Размещает ли функция malloc массив как единый участок в памяти?

Да.

ttnl
Может ли возникнуть

следующая ситуация: realloc’у, увеличивая размеры этого участка, не удалось найти места,

чтобы поместить массив как единое целое (память фрагментирована?)

Может. В таком случае возвращается NULL. Если ты не будешь проверять возвращаемое значение, программа действительно выпадет в SEGFAULT.

ttnl
Может быть лучше использовать список:

struct data

{

     struct data *next;

     struct data *prev;

     …

};

Может быть. Решать тебе. Кстати, есть много разных видов списков (односвязные/двусвязные, циклические или нет и т.д.), все это зависит от конкретных нужд.

ttnl
По собственным ощущениям. Со списком ничего подобного случится не может,

но хочется сделать проще.

Может, конечно — память не резиновая. Но вероятность такого исхода значительно меньше.

ttnl

Большое спасибо. Принимаю Ваш совет как руководство к действиям.