Результаты поиска по запросу "dangling-pointer"

7 ответов

Это будет выводить

исал программу на C с висящим указателем. #include<stdio.h> int *func(void) { int num; num = 100; return &num; } int func1(void) { int x,y,z; scanf("%d %d",&y,&z); x=y+z; return x; } int main(void) { int *a = func(); int b; b = func1(); ...

8 ответов

Это «грязный» способ использования адресов памяти. Когда вы возвращаете адрес (указатель), вы не знаете, относится ли он к локальной области действия функции. Это просто адрес. Теперь, когда вы вызвали функцию 'foo', этот адрес (ячейка памяти) для 'a' уже был размещен там в (по крайней мере, пока безопасно) адресуемой памяти вашего приложения (процесса). После того, как функция 'foo' вернулась, адрес 'a' может считаться 'грязным', но он там, не очищен и не нарушен / не изменен выражениями в другой части программы (по крайней мере, в этом конкретном случае). Компилятор C / C ++ не останавливает вас от такого «грязного» доступа (хотя может вас предупредить, если вам не все равно). Вы можете безопасно использовать (обновлять) любую область памяти, которая находится в сегменте данных экземпляра вашей программы (процесса), если вы не защищаете адрес каким-либо способом.

я есть следующий код. #include <iostream> int * foo() { int a = 5; return &a; } int main() { int* p = foo(); std::cout << *p; *p = 8; std::cout << *p; }И код просто выполняется без исключений времени выполнения! Выход был58 Как это может быть? ...

5 ответов

В чем разница между удалением указателя и установкой его в nullptr? [Дубликат]

На этот вопрос уже есть ответ: удалить против NULL против свободного в c ++ [/questions/2910587/delete-vs-null-vs-free-in-c] 6 ответовГоворитdelete pointer а такжеpointer = nullptr то же самое? Вероятно, нет, но освобождает ли последний память? ...

ТОП публикаций