The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Перевыделение памяти в функции и возврат нового указателя"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Перевыделение памяти в функции и возврат нового указателя"  
Сообщение от Answer on 01-Авг-07, 03:20 
Всем привет!
Сталкнулся с проблебой выделения памяти на C, попробую объяснить на примере:

func1(){
   char *a = NULL;
   func2(a);
}
some_t func2(char *a){
   a = strdup("Some text!");
}

Проблема в том что при выходе из функции2 a продалжает оставиться NULL. На самом деле функция2 использует realloc и будет выделять или перевыделять много пямяти в случае необходимости. В мануале сказано о возможности изменения указателя при использовании realloc'а. Как изменить указатель, передав его в качестве аргумента функции? Возврат нового значения указателя ретурном не подойдет.

Очень прошу помочь начинающему программеру (мне). С изучаю по манам, а искусственный мозг гугла не понимает что я от него хочу!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Перевыделение памяти в функции и возврат нового указателя"  
Сообщение от anonymous (??) on 01-Авг-07, 03:37 
>Всем привет!
>Сталкнулся с проблебой выделения памяти на C, попробую объяснить на примере:
>
>func1(){
>   char *a = NULL;
>   func2(a);
>}

Дело в том, что внутри func2 "a" -- как обычная локальная переменная, отдельная копия "а" из func1.  Нужно передавать указатель на a, чтобы изменялся именно указатель:

func1(){
   char *a = NULL;
   func2(&a);
}

some_t func2(char **a){
  *a = strdup("Some text!");
}

Одним словом, нужно чтобы изменялся int -- передаёте указатель на int.  А если нужно чтобы изменялся  -- передаёте указатель на <указатель на char>.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру