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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2012, 12:33   #1
aues
Новичок
Джуниор
 
Регистрация: 31.03.2012
Сообщений: 2
По умолчанию Как создать динамически массив указателей в Си

Пожалуйста помогите!
Есть код:
Код:
static void solve_pde_multigrid( CompBuf *F, CompBuf *U , short iterations, int mins, int levels)
{
	CompBuf *D, *C;
	int xmax = F->x;
	int ymax = F->y;
	
	int i;	// index for simple loops
	int k;	// index for iterating through levels
	int k2;	// index for iterating through levels in V-cycles

	// 1. restrict f to coarse-grid (by the way count the number of levels)
	//	  k=0: fine-grid = f
	//	  k=levels: coarsest-grid
	int pix = CB_VAL;
	int cycle;
	int sx, sy;

	// given function f restricted on levels
	CompBuf* RHS[levels+1];
	
	// approximate initial sollutions on levels
	CompBuf* IU[10];
	// target functions in cycles (approximate sollution error (uh - ~uh) )
	CompBuf* VF[10];

	VF[0] = alloc_compbuf(xmax,ymax, pix, 1);
	
	RHS[0] = alloc_compbuf(xmax,ymax, pix, 1);
	//mirror_compbuf_data(F, RHS[0]);
	copy_compbuf_data(F, RHS[0]);
	IU[0] = alloc_compbuf(xmax,ymax, pix, 1);
	copy_compbuf_data(U, IU[0]);
.... и т.д.
не работает варажение: CompBuf* RHS[levels+1];
ошибка - не может создать массив неизвестного размера! Если вместо levels+1 поставить 10, как это сделано ниже, то программа работает, но ведь это не гуд, как же объявить динамически массив указателей для этого кода?

Последний раз редактировалось ACE Valery; 02.04.2012 в 13:48.
aues вне форума Ответить с цитированием
Старый 31.03.2012, 12:37   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Тезис: На с++ не существуют никаких динамических массивов.

Решения:

1. Использовать контейнеры STL (vector<CompBuf*> mPtrs, и тп)

2. Задействовать ручную механику работы с динамической памятью: CompBuf** mPtrs = new CompBuf*[количество];
_Bers вне форума Ответить с цитированием
Старый 02.04.2012, 06:05   #3
aues
Новичок
Джуниор
 
Регистрация: 31.03.2012
Сообщений: 2
По умолчанию Си

Цитата:
Сообщение от _Bers Посмотреть сообщение
Тезис: На с++ не существуют никаких динамических массивов.

Решения:

1. Использовать контейнеры STL (vector<CompBuf*> mPtrs, и тп)

2. Задействовать ручную механику работы с динамической памятью: CompBuf** mPtrs = new CompBuf*[количество];
Спасибо за отклик!
Этот код на си, программа с открытым исходным кодом по 3D графике, в первоначальном виде (levels+1) она компилируется некоторыми компиляторами без проблем (собирал на ubuntu и scons) без проблем, но на винде с VS2008 и 2010 не получается, если вместо levels+1 ставлю 10, то всё хорошо! Просто на будущее хотелось бы знать как бы настоящий программист сделал бы!

Ругается на оператор new!
aues вне форума Ответить с цитированием
Старый 02.04.2012, 16:57   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
она компилируется некоторыми компиляторами
gcc, например, позволяет такие конструкции (T a[n], n - переменная), но код становится непереносимым, ибо в стандарте такого нет. просто создаете динамический массив
Код:
T * a = new T[n];
и не забываете его удалять
Код:
delete [] a;
либо контейнеры stl
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 05.04.2012, 21:33   #5
rmv240899
Форумчанин
 
Регистрация: 18.02.2012
Сообщений: 155
По умолчанию

_Bers, полностью согласна с вами.
Массив указателей - это двумерный массив.
rmv240899 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать базу mdb динамически masal77 БД в Delphi 3 12.04.2011 19:42
Динамически создать массив кнопок (design time) HellMercenariess Общие вопросы Delphi 4 21.11.2009 00:47
Как создать обработчик событий для динамически созданного объекта Лукманов Александр Общие вопросы Delphi 1 22.03.2009 22:05
Как динамически создать компонент subsonic Общие вопросы Delphi 2 13.03.2009 15:23
Как создать главное меню динамически Djonik Общие вопросы Delphi 3 17.02.2009 17:41