Форум программистов, компьютерный форум CyberForum.ru

Как в отдельной функции выделить память для динамического массива, объявленного в main - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Стандартный поток и STL (std::copy to std::cout) http://www.cyberforum.ru/cpp-beginners/thread1044988.html
#include <iostream> #include <sstream> #include <algorithm> #include <functional> #include <string> using namespace std; bool contains(std::string word, std::string substring) { return word.find(substring) != std::string::npos;
C++ Удалить сдвигом элементы массива Помогите пожалуйста написать программы: 3)Дан массив из 15 элементов, удалить сдвигом элементы массива, кратные 5 и расположенные между 2м и 3м нулевыми элементами (не задействованные элементы массива обнулить). http://www.cyberforum.ru/cpp-beginners/thread1044982.html
Найти самых больших элементов массива, являющихся простыми числами C++
Помогите пожалуйста написать программы: 2)Дан массив из 15 элементов, найти 3 самых больших элементов массива, являющихся простыми числами.
C++ Поменять местами цифры числа, стоящие на чётных и нечётных местах
Помогите пожалуйста написать программы: 1) Вводится натуральное число, надо поменять местами цифры числа, стоящие на чётных и нечётных местах, если количество цифр нечётное, то последняя цифра отбрасывается.
C++ Мистика с Visual Studio http://www.cyberforum.ru/cpp-beginners/thread1044971.html
Господа, выручайте, прошу. Знаю код корявый, но точно рабочий. Компилился и работал буквально сутки назад. Бьюсь уже 5 часов, не понимаю что случилось, код компилиться, но на вывод, просто выводит структуры в таком порядке, в котором вводил, просто игнорирует процедуры сортировки. Выручайте... #include <iostream> #include <fstream> #include <string> #include <windows.h> #include <vector>...
C++ Выбрать из текста только те символы, которые встречаются в нем только один раз Здравствуйте, помогите пожалуйста написать программу:) Условие. Дана строка, содержащая текст на русском языке. Выбрать из него только те символы, которые встречаются в нем только один раз, в том порядке, в котором они встречаются в тексте. подробнее

Показать сообщение отдельно
Дима С
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 9
17.12.2013, 09:56     Как в отдельной функции выделить память для динамического массива, объявленного в main
Доброго времени суток.
Передо мной стоит задача выделения памяти для динамического массива в отдельной функции.
То есть я объявляю в main динамический массив, вызываю функцию, его инициализирующую, потом уже в main с ним работаю.
Для одномерного массива получилось так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void get_memory ( int size, double **a); // прототип функции для выделения памяти
 
#include "stdio.h"
#include <fstream>
 
using namespace std;
int main()
{
    double *arr;
    int M = 3;
    get_memory ( M , &arr ); // выделение памяти
    for ( int i = 0 ; i < M ; i++ ) 
    {
        arr[i] = i ; // Заполнение массива
    }
    ofstream out ("result.csv");
 
    for ( int i = 0 ; i < M ; i++ ) // вывод результатов
    {
        out << arr[i] << ",";
            out << "\n";
    }
    return 0;
}
 
void get_memory ( int size, double **a ) // вызов функции для выделения памяти
{
    *a = new double [size];
}
И это работает.
А вот когда я попробовал сделать для двумерного:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void get_memory_2D ( int M, int N, double ***arr_2D); // прототип функции для выделения памяти
 
#include "stdio.h"
#include <fstream>
 
using namespace std;
int main()
{
    double **arr_2D;
    int M = 3;
    int N = 3;
    get_memory_2D ( M, N, &arr_2D); // вызов функции для выделения памяти
    for ( int i = 0 ; i < M ; i++ )
    {
        for ( int j = 0 ; i < N ; j++ )
        {
            arr_2D[i][j] = i * ( j + 1 ); // Заполнение массива
        }
    }
    ofstream out ("result1.csv");
 
    for ( int i = 0 ; i < M ; i++ ) // вывод результатов
    {
        for ( int j = 0 ; i < N ; j++ )
        {
            out << arr_2D[i][j] << ",";
        }
        out << "\n";
    }
    return 0;
}
 
void get_memory_2D ( int M, int N, double ***arr_2D )
{
    **arr_2D = new double [M];
    for ( int i = 0 ; i < M ; i++ )
    {
    *arr_2D[i] = new double [N];
    }
}
, то программа успешно откомпиллировалась, но при выполнении возникло необработанное исключение "нарушение прав доступа при записи".
Почему под одномерный массив получается так выделять память, а под массивы большей размерности - нет?
Может, я что-то не то передаю в функцию, в качестве аргументов?
Можно решить задачу стоящую передо мной как-то по-другому?
Буду признателен, если порекомендуете литературу по этому вопросу.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru