Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2011, 23:41   #1
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
Вопрос выделение памяти под массив на C

В main я описываю переменную:
Код:
int *x;
потом вызываю такую процедуру, в которую передаю эту переменную:
Код:
void proc(int *x, int n)
{
      ...
      x = (int *) malloc(sizeof(int) * n)
      ...
}
Так вот после того, как proc выполнится вся выделенная с помощью malloc память слетает и данные из x соответственно теряются, как сделать, чтобы после выполнения proc можно было использовать данные из x?
Kingdom_Reborn вне форума Ответить с цитированием
Старый 12.01.2011, 00:19   #2
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

Разобрался, нужно
Код:
 *x = *(int *) malloc(sizeof(int) * n)
Kingdom_Reborn вне форума Ответить с цитированием
Старый 12.01.2011, 00:32   #3
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Цитата:
чтобы после выполнения proc можно было использовать данные из x?
Код:
int* proc(int *x , int n){
      return  (int*) malloc(n*sizeof(int));
}
Цитата:
Разобрался, нужно
Код:

*x = *(int *) malloc(sizeof(int) * n)
так ты присваиваешь значение указателю

Последний раз редактировалось NiCola999; 12.01.2011 в 01:08.
NiCola999 вне форума Ответить с цитированием
Старый 12.01.2011, 00:32   #4
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

А не проще ли возвращать этот указатель return'ом, раз уж у Вас функция void? Хотя это конечно дело вкуса
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 12.01.2011, 00:40   #5
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

Цитата:
Сообщение от NiCola999 Посмотреть сообщение
Код:
int* proc(int *x , int n){
      return  (int*) malloc(n*sizeof(int));
}
так ты присваиваешь значение указателю, а не выделяешь память
ну так память я с помощью malloc выделяю, а x я и присваиваю указатель на выделенный кусок, мне это и надо

А return'ом не катит, т. к. у мне нужно несколько массивов создавать; в процедуру передаётся один массив, а она по его данным делает несколько, а proc я просто как пример привёл.

Последний раз редактировалось Kingdom_Reborn; 12.01.2011 в 00:44.
Kingdom_Reborn вне форума Ответить с цитированием
Старый 12.01.2011, 00:53   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Код:
int *x;
*x = *(int *) malloc(sizeof(int) * n);
память выделяется, но указатель на память не присваивается x, программа просто свалится, так как x = null

Последний раз редактировалось NiCola999; 12.01.2011 в 00:57.
NiCola999 вне форума Ответить с цитированием
Старый 12.01.2011, 01:00   #7
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Вопрос
Цитата:
malloc память слетает и данные из x соответственно теряются
Может время позднее и я уже туплю!!! Но куда пропадёт выделенная память? И вообще с чего ей пропадать!
И из X ничего не теряется! зачем указатель возвращать через return!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 12.01.2011, 01:02   #8
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

x в данном случае это локальная переменная, доступная только из функции
NiCola999 вне форума Ответить с цитированием
Старый 12.01.2011, 01:09   #9
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Да простите, не прав и правда спать пора!!!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 12.01.2011, 01:12   #10
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

Цитата:
Сообщение от NiCola999 Посмотреть сообщение
x в данном случае это локальная переменная, доступная только из функции
Она то локальная, но я же по адресу передаю x в proc, поэтому могу x изменять. Короче, мне нужно создать несколько массивов в процедуре proc, чтобы с ними работать дальше, вот я допустим передаю в proc указатели x, y, z.
Код:
void proc(int* x, int *y, int *z)
(это был заголовок proc)

потом в proc создаю эти массивы x, y, z, заполняю их нужными данными и использую дальше.
Kingdom_Reborn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выделение памяти под массив (си скрипт) eduard93 Общие вопросы C/C++ 0 19.12.2010 19:41
Выделение динамической памяти под правый треугольник квадратной матрицы Assasin92 Общие вопросы C/C++ 0 30.10.2010 23:14
Динамическое выделение памяти под массив объектов со специализированным конструктором capta1n Общие вопросы C/C++ 6 07.03.2010 16:01
динамическое выделение памяти под верхний треугольник квадратной матрицы juventine Помощь студентам 2 12.04.2009 13:02
Динамическое выделение памяти под массивы Артем125 Общие вопросы C/C++ 4 07.04.2009 09:52