IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> выделение памяти под массив в подпрограмме, с++
мисс_граффити
сообщение 17.01.2011 14:58
Сообщение #1


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Понимаю, что задача простейшая, но запуталась.

Итак. Есть файл, содержащий числа. Сколько их - заранее неизвестно (порядка 100).
Мне надо из файла эти числа раскидать в 2 массива (через одно, т.е. массивы одинаковой размерности).

Массивы объявлены, скажем так, в головной программе. Чтение из файла хочу вынести в подпрограмму, т.е. указатели на массивы передавать как параметры. Но получается, что размер массива я узнаю только в подпрограмме (когда уже узнала у пользователя, какой он файл хочет открыть, убедилась, что файл существует и оценила его размер). Соответственно, память под массив надо выделять там же, в подпрограмме.
А уже потом (заполненный) использовать в головной программе.
Как это можно сделать?


				 double *L; 
				 double *beta;
//------------------------вот начиная отсюда все должно быть в подпрограмме
				 FILE *f;
				 if (f=fopen("myfile.bin","rb")){

					 //определяем размер файла
					 long size;
					 fseek(f, 0, SEEK_END);
					 size = ftell(f);
					 fseek(f, 0, SEEK_SET);

					 //файл корректного размера
					 if ((size%(2*sizeof(double)))==0){
						 L=new double[size/(2*sizeof(double))];
						 beta=new double[size/(2*sizeof(double))];
						 for (int i=0;i<size/2;i++){
							 fread(&L[i],sizeof(double),1,f);
							 fread(&beta[i],sizeof(double),1,f);
						 }
					 }
//-----------------------------------------а дальше работа с L и beta


Сообщение отредактировано: мисс_граффити - 17.01.2011 15:04


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
volvo
сообщение 17.01.2011 15:59
Сообщение #2


Гость






Если это действительно С++, то есть, допустимы ссылки - то вот так:

int get_arr(int*& array)
{
    // тут каким-то образом получаешь size_of_array
    int size_of_array = 10;

    array = new int[size_of_array];
    // тут можно заполнить массив

    return size_of_array;
}
int main()
{
    int *arr, size = 0;

    size = get_arr(arr);
    return 0;
}

Если нет - то передавай указатель на указатель. Ну, там у тебя double- это не важно...
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 17.01.2011 16:48
Сообщение #3


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


спасибо. ссылки вполне допустимы.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 28.07.2025 0:51
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"