|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.11.2018, 13:59 | #1 |
Регистрация: 07.11.2018
Сообщений: 6
|
Работа с динамическим массивом в Си. Разделение по функциям
Всем привет. Собственно необходимо произвести аллокацию, инициализацию и вывод двумерного массива. Вроде всё легко за исключением того, что не получается отдельной функцией произвести вывод массива.
Если содержимое show_matrix разместить в init_matrix, то всё норм, но нужно по разным функциям распределить. Вроде же по указателям делаю запрос на вывод и заполняю по ним. Код:
|
07.11.2018, 14:15 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Посмотрите в отладчике свою матрицу после функции init. И в первом выделении памяти нужен int* в сайзофе.
|
08.11.2018, 13:31 | #3 |
Регистрация: 07.11.2018
Сообщений: 6
|
В sizeof исправил и убрал return **a в init_matrix т.к. не подставляю функцию для переменных и прочего. Скачал OllyDbg v1.10 с оф сайта. Да там же разобрано в асм всё. Пока в дебаггере мало чего разобрал, но заливаюсь по-немногу этим. Раньше только работал в PHP и опыт в нём достаточный, а тут решил на прикладное прог. перейти и выбрал Си изучать. Просто не понятно мне почему прога вылетает на функции show_matrix, а если её тело пихнуть в init, то всё нормально. Ведь я же не на прямую, а с указателями да адресами работаю. Видимо не до конца разобрался как в Си массивы варятся. Ладно пойду дальше разбирать работу с указателями.
|
08.11.2018, 13:35 | #4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Зачем вам оля? У вас есть ИДЕ с отладчиком и исходными кодами...
Я же зря говорил - посмотрите на указатель до и после вызова инита. |
08.11.2018, 20:59 | #5 | |||
Регистрация: 07.11.2018
Сообщений: 6
|
Цитата:
Решил проверить указатель до и после, а там после 00000000. Код:
Цитата:
Т.е. функция init_matrix не внесла адрес в указатель arr. Если провести выделение памяти до init, то Цитата:
|
|||
08.11.2018, 21:31 | #6 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Цитата:
А теперь внимание вопрос: если вам надо изменить указатель то, что надо передать? А если в вашем случае указатель на указатель? |
|
09.11.2018, 08:08 | #7 |
Регистрация: 07.11.2018
Сообщений: 6
|
Ну т.к указатель хранит только адрес, то и передавать в него нужно только адрес. В моём случае указатель хранит адрес массива адресов на массивы которые уже хранят числа.
Значит при вызове init мне надо передать адрес указателя в неё. Т.е. уже создать массив с указателями до вызова init как я делал выше ну или внести этот адрес из init в указатель объявленный в main int ** arr = NULL; и сделать это через ссылку. |
20.11.2018, 20:25 | #8 |
Регистрация: 07.11.2018
Сообщений: 6
|
Появилось время разобраться с этим вопросом и вроде получилось. Просто объявил в функции возвращение указателя на массив указателей и всё заработало. Приведу код ниже так на всякий. Может кому поможет.
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с двумерным динамическим массивом | Fylh_if | Общие вопросы C/C++ | 1 | 15.12.2014 08:14 |
Работа с Динамическим массивом эдитов | Xatiko | Помощь студентам | 4 | 05.03.2013 11:29 |
Работа с двумерны динамическим массивом | Serega_86 | Помощь студентам | 2 | 02.09.2012 15:40 |
(delphi) работа с динамическим массивом | anubiss | Помощь студентам | 0 | 21.05.2012 21:09 |
Работа с динамическим массивом | sand | Общие вопросы C/C++ | 3 | 22.08.2008 12:48 |