Действительно ли безопасно снова использовать переменные указателей после освобождения, на что они указывают?

Похоже, Buildout может быть то, что вы ищете.

Источник

11
задан Nick Presta 2 February 2009 в 21:26
поделиться

9 ответов

То, что Вы делаете, прекрасно: потому что после выпуска указателя Вы повторно инициализируете его перед многократным использованием его.

Если вопрос, "это безопасный снова использовать значение указателя после освобождения его" затем, ответ является "нет".

Если вопрос, "это безопасный снова использовать переменную указателя после освобождения ее значения" затем, ответ "да, если Вы повторно инициализируете его к (новому) допустимому значению перед многократным использованием его".

22
ответ дан 3 December 2019 в 03:05
поделиться

Да. Это безопасно. (Ужасный, но безопасный :))

3
ответ дан 3 December 2019 в 03:05
поделиться

Я не могу сказать. Это выглядит безопасным, но я не вижу выделения памяти, таким образом, я не могу быть уверен, что Вы освобождаете правильные вещи.

1
ответ дан 3 December 2019 в 03:05
поделиться

Я не вижу технического вопроса с многократным использованием их. Это могло бы вредить с точки зрения удобочитаемости и пригодности для обслуживания и увеличить шанс ошибок.

1
ответ дан 3 December 2019 в 03:05
поделиться

Неясно мне, что Вы подразумеваете под повторным использованием.

Если Вы имеете в виду это:

int* pInt = new int;
*pInt = 3;
delete pInt;

pInt = new int;

Затем да, это безопасно.

1
ответ дан 3 December 2019 в 03:05
поделиться

Безопасно присвоить что-то еще тому же указателю. Абсолютно НЕ безопасно снова использовать free'ed память. Когда-то, много кода освободило бы блок памяти и затем использовало бы его, как будто это не был свободный редактор. Это вызвало серьезные проблемы, когда тот код был портирован к другим операционным системам, которые не были так довольны той парадигмой.

1
ответ дан 3 December 2019 в 03:05
поделиться

Нет.

Другая подсказка - просто, потому что Вы натыкаетесь на автостраду без того, чтобы быть пораженным, не делает тот сейф также.

Какие указатели Вы думаете, что "снова используете"? Я не вижу, что что-либо используется после того, как это освобождено, хотя я предполагаю, что readWords и countWords выделяют память. Если они не делают затем, у Вас есть еще большие проблемы.

0
ответ дан 3 December 2019 в 03:05
поделиться

Не ясный, поскольку выделение не показывают.

В целом безопасно повторно присвоить указатель для указания на что-то еще после освобождения, на что это раньше указывало.

0
ответ дан 3 December 2019 в 03:05
поделиться

Во-первых, мне не удается видеть, что преждевременное "освобождает" здесь (никакой апостроф!). Где Вы думаете Вы данные доступа, которые Вы уже освободили, точно?

Кроме того, даже при доступе к данным после освобождения его это зависит от системы, несколько ли это безопасно или нет. Системы могли бы принять решение дать освобожденную память другим процессам для повторного использования сразу, в то время как другие системы, особенно при использовании довольно частных функций lib, таких как malloc могли бы просто использовать память, которая только доступна этому вашему процессу, таким образом, ничего не произойдет с освобожденной памятью, потому что никакие другие части системы не будут знать об этом.

0
ответ дан 3 December 2019 в 03:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: