Я написал некоторый массив, который выделяет память, и каждое значение в массиве является типом. Затем у меня есть другой массив, который состоит из первого массива для ссылок.Realloc создает висячие указатели?
Оба массива могут расти. Он использует realloc. Поскольку второй массив содержит указатели в первом, они, разумеется, не обновляются, когда изменяется первый массив (я не делаю это вручную, и нет GC). Разумеется, все указатели во втором массиве недействительны! (они указывают на память, свободную от realloc).
Это верно?
Похоже, что это сделает упорные указатели на блоки памяти, которые могут перемещаться очень опасно?
Какое стандартное решение? Не использовать «глобальные» указатели? Использование указателей для указателей на указатели? Я думаю, что я мог бы использовать 2-й массив ** и мог бы, вероятно, заставить все работать.
В условиях МТ все еще хуже. Доступ к локальным указателям может быть перемещен посередине, затем память изменилась, а локальный указатель теперь ошибочен. (Который, конечно, может быть разрешен путем предотвращения ходов блокировкой и т. Д.)
Идите с функциональным программированием?
1. Я думаю, что у вас есть проблема с структурой данных. 2. Почему вы используете указатели? Разумные указатели. –
Не храните указатели на первый массив. Храните индексы. Они останутся действительными, если ваш первый массив будет продолжать расти. – PSkocik
@PSkocik Да, но это не всегда решение. Это работает в этом случае, потому что я использую индексный массив. Он не отвечает на вопрос, только пытается предоставить конкретное решение (решение, которое я уже слышал, и когда я впервые написал код, который был моим первоначальным ответом .. Но я был как «Привет, int и void * занимает То же место, почему бы просто не использовать указатель! »... затем быстро понял, что это была плохая идея. – AbstractDissonance