![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 03.10.2010
Сообщений: 321
|
![]() Код:
Почему данный код генерирует Segmentation fault? Почему выделяемая память в func не сохраняется в указателе при выходе из функции? |
![]() |
![]() |
![]() |
#2 | |
Пользователь
Регистрация: 25.12.2013
Сообщений: 91
|
![]() Цитата:
![]() Чтобы не потерять адрес памяти, выделенной в функции, надо вернуть из функции указатель на этот участок памяти и записать этот адрес в указатель, определённый в main() Код:
|
|
![]() |
![]() |
![]() |
#3 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Код:
Кстатти: http://www.programmersforum.ru/showthread.php?t=92433
I'm learning to live...
Последний раз редактировалось Stilet; 13.10.2014 в 22:54. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
![]()
Hemul, а вообще, используйте C++ строки вместо сишных:
Код:
|
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
Внутри функции фигурирует копия указателя, а вовсе не оригинал: Код:
И когда функция завершается, заканчивается время жизни этой копии. А оригинальный указатель остается без изменений. Что бы внутри функции влиять на оригинальные данные, а не на копии, можно пойти двумя путями: 1. Путь сишника. Передавайте в функцию указатель на указатель. Господин Stilet показал вам пример..... Лично я считаю, что путь сишника в с++ коде это плохо. Потому что на языке с++ можно сделать проще, безопаснее и эффективнее. 2. Путь сишника-с-крестами (в народе просто: плюснутого, приплюснутого, крестанутого, крестухана, крестобл... ну вы понэли) Если функция ожидает реально существующий объект, и внутри функции нужно влиять на оригинал, а не на копию - передают ссылку на этот объект: Код:
Последний раз редактировалось _Bers; 14.10.2014 в 12:11. |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Распределение памяти. Динамическое выделение памяти с++ | Tolian92 | Помощь студентам | 8 | 14.05.2012 21:44 |
Язык СИ! Динамическое выделение памяти под массивы и матрицы, передача матрицы в функции | Андрей! | Общие вопросы C/C++ | 33 | 31.01.2012 22:07 |
Выделение памяти в функции | SVLay | Visual C++ | 4 | 22.01.2012 16:53 |
Выделение памяти | antoha.by | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 29.04.2008 20:04 |
Выделение памяти в функции для переданных параметров | LinuxUser | Общие вопросы C/C++ | 1 | 12.11.2007 19:21 |