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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2011, 01:15   #11
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Цитата:
Она то локальная, но я же по адресу передаю x в proc, поэтому могу x изменять
да, верно, туплю
NiCola999 вне форума Ответить с цитированием
Старый 12.01.2011, 04:31   #12
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

Тот мой вариант оказывается не катит...
К примеру:
Код:
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>

void proc(int *x, int n)
{
	int i;
	*x = *(int *) malloc(sizeof(int) * n);
	for (i = 0; i < n; i++)
		x[i] = i;
}

int main()
{

	int *x, i, n;
	n = 5;
	proc(x, 5);
	for (i = 0; i < n; i++)
		printf("%d ", x[i]);
	printf("\n");
	return 0;
}
Программа массив то выводит, но потом пишет Null pointer assignment. Как это исправить? return тут мне не годится, т. к. в proc должно несколько массивов передаваться и одним return'ом их все вернуть не удасться, а здесь в proc я просто для простоты только один массив как параметр оставил. И вариант вызова заранее malloc для x, а потом передача x в proc тоже не годится, т. к. размер массива может понадобитсья вычислить в самой процедуре proc.

Компилирую на Borland C 3.1

Последний раз редактировалось Kingdom_Reborn; 12.01.2011 в 04:35.
Kingdom_Reborn вне форума Ответить с цитированием
Старый 12.01.2011, 04:40   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>

void proc(int **x, int n)
{
	int i;
	*x = (int *) malloc(sizeof(int) * n);
	for (i = 0; i < n; i++)
		(*x)[i] = i;
}



int main()
{
	int *x, i, n;
	n = 5;
	proc(&x, 5);
	for (i = 0; i < n; i++)
		printf("%d ", x[i]);
	printf("\n");
	return 0;
}
Цитата:
Она то локальная, но я же по адресу передаю x в proc
чтото не видел передачи по адресу, вижу по значению.

еще можно так:
Код:
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>

int* proc(int n)
{
	int i;
	int* t = (int *) malloc(sizeof(int) * n);
	for (i = 0; i < n; i++)
		t[i] = i;
           return t;
}



int main()
{
	int *x, i, n;
	n = 5;
           x=proc(n);
	for (i = 0; i < n; i++)
		printf("%d ", x[i]);
	printf("\n");
	return 0;
}
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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