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

Выделение памяти для двухмерного массива внутри функции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Проверка числа на то, что оно целое http://www.cyberforum.ru/cpp-beginners/thread789667.html
Помогите пожалуйста выловить ошибку: Функция должна проверять введенную пользователем строку. Если строка - целое число, возвращать его. Но что-то идет не так, может кто со свежей головой поможет разобраться. Функция проверяет посимвольно строку, и если символ не цифра, то просит повторить ввод, если цифра - заносит в массив. При всех цифрах, цикл заканчивается и делается преобразование...
C++ Найти все парные трехзначные числа, сумма которых не превышает 10 Найти все парные трехзначные числа, сумма которых не превышает 10. Зарание спасибо :) http://www.cyberforum.ru/cpp-beginners/thread789663.html
C++ Массив строк
Здравствуйте. Разбираюсь с массивами :) Вопрос: почему при выполнении программы выдаются адреса памяти, а не строки? #include <iostream> using namespace std; int main() { int a=
C++ Реализация Поиска В Файле
Здравствуйте! В книге Лафоре по ООП на С++ есть задача, реализовать в программе приведенной в главе ( ее я собственно привожу ниже, правда уже в измененном виде, она отличается от данного в учебнике образца лишь методом findEmp(); ) Программа вроде бы и рабочая, но все же думается мне, что я сделал не совсем не то, что хотел от меня автор книги. Текст задачи: К программе EMPL_IO из этой...
C++ Использование функциональных классов http://www.cyberforum.ru/cpp-beginners/thread789657.html
Помогите решить задачу: Создать список из строк длиной не более 100 символов. Из всех подряд идущих строк с одинаковым количеством цифр оставить только одну. Физически уменьшить размер списка. Примечание: Во всех вариантах этого задания требуется написать собственный функциональный класс и использовать его в подходящих для выполнения задания алгоритмах STL. Соответствующие контейнеры...
C++ WFA для С++ [VS2008-2010] Есть ли какие нить пособия? хотелось бы сходить потихоньку с консоли в GUI Понимаю, интернет полон информации но хотелось бы увидеть рекомендации местных cpp-шников ^_^ подробнее

Показать сообщение отдельно
kaludis
 Аватар для kaludis
2 / 2 / 0
Регистрация: 18.05.2012
Сообщений: 12
19.02.2013, 01:01     Выделение памяти для двухмерного массива внутри функции
Здравствуйте.
Предположим, есть код:
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>
 
using std::cout;
using std::endl;
 
const int M = 4;
const int N = 4;
 
void initMatrix( int**, int, int );
void freeMatrix( int**, int, int );
void showResultMatrix( int**, int, int );
 
int main(int argc, char *argv[]) {
 
    srand(time(NULL));
 
    int **matrix = NULL;
 
    initMatrix( matrix, M, N );
    showResultMatrix ( matrix, M, N );
    freeMatrix( matrix, M, N );
 
    return 0;
}
 
void initMatrix(int **mtrx, int m, int n ) {
    mtrx = new int *[m];
 
    for ( int i = 0; i < m; ++i )
        mtrx[i] = new int[n];
 
    for ( int i = 0; i < m; ++i )
        for ( int j = 0; j < n; ++j )
            mtrx[i][j] = rand() % 10 + 1;
}
 
void freeMatrix( int **mtrx, int m, int n ) {
    for ( int i = 0; i < m; ++i)
        delete[] mtrx[i];
    delete[] mtrx;
}
 
void showResultMatrix( int **mtrx, int m, int n) {
    for ( int i = 0; i < m; ++i ) {
        for ( int j = 0; j < n; ++j ) {
            cout << std::setw( 4 );
            cout << mtrx[i][j];
        }
        std::cout << std::endl;
    }
}
initMatrix - выделяет память под матрицу MxN;
freeMatrix - освобождает память из под матрицы MxN;
showResultMatrix - отображает матрицу MxN;

При входе в функцию showResultMatrix() и попытке вывода элементов, выпадает сегфолт.
gdb показывает, что после выхода из initMatrix() указатель на указатель "**matrix" содержит нулевой адрес (0x0).

С другой стороны, если выделять память в теле main() или выделять в initMatrix() как и в первом случае, но возвращать указатель явно через return, подобного не происходит и программа отрабатывает нормально.

С чем связано такое поведение передаваемого указателя на указатель?
Компилятор g++ 4.7.2.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru