0 / 0 / 0
Регистрация: 08.05.2011
Сообщений: 9
|
|||||||||||
1 | |||||||||||
Аргументы-указатели и динамическая матрица, проблема с реализацией функции28.10.2011, 21:40. Показов 1272. Ответов 7
Метки нет (Все метки)
Здравствуйте, форумчане!
У меня следующая проблема: в main определена переменная-указатель на указатель(к примеру char **ptr; ), необходимо написать функцию, которая бы создала матрицу при помощи ф-й выделения дин.памяти, присвоила элементам некоторые значения, и чтобы этот ptr в итоге указывал бы на эту матрицу. Т.е. суть в том, чтобы выделение памяти было вне main(), но в тоже время, чтобы можно было из main() освободить память, выделенную под ту матрицу без использования статических,глобальных и т.п. переменных. Вот мой очень грубый пример, чисто для иллюстрации идеи.
Почему так произошло и как этого избежать?
0
|
28.10.2011, 21:40 | |
Ответы с готовыми решениями:
7
Динамическая матрица, не выводит через указатели Проблема с реализацией функции поиска по структуре Создание функции, формирующую предложение из аргументов функции, аргументы . Аргументы - переменное число Транслируются ли аргументы функции CoCreateInstance в аргументы функции DllGetClassObject? |
0 / 0 / 0
Регистрация: 08.05.2011
Сообщений: 9
|
|
29.10.2011, 15:12 [ТС] | 3 |
В данном коде нет ошибок синтаксиса, если Вы об этом.
А переменная ptr заявлена в matr как char ***, а разыменованием я "понижаю" ее до char **, где же здесь ошибка? Добавлено через 17 часов 21 минуту Ошибка найдена - в строке 7(8,10) имеется *ptr[i], на самом деле имелось в виду (*ptr)[i]. Исправление приводит к корректной работе.
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
29.10.2011, 15:28 | 4 |
надо делать это же, но по-другому
в функции создай локальный указатель на указатель помести в него матрицу, заполни её а потом в конце *ptr = p; (вообще, матрицу делаешь одной функцией, а заполняешь другой функцией)
1
|
Заблокирован
|
||||||
29.10.2011, 15:30 | 5 | |||||
нужна поддержка С99, или вынесете объявление типов из циклов for()
консоль
0 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0
1 0 1 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 1 0 0 1 1 1 0 1 0 0 0 0 0 1 0 1 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 0 1 0 0 1 1 1 0 1 1 1 0 0 1 1 1 0 1 0 1 0 0 0 0 1 0 0 1 1 0 1 1
1
|
Заблокирован
|
|
29.10.2011, 18:19 | 6 |
Вы уж там три звездочки поставили в параметр?! Я даже не заметил. Но это очень плохой стиль программирования! Можно запутаться в звездочках.
Вам следовало бы переопределить функцию таким образом, чтобы вместо void она возвращала указатель на выделенную память. То есть у вас крайне плохой интерфейс функции.
0
|
0 / 0 / 0
Регистрация: 08.05.2011
Сообщений: 9
|
|
29.10.2011, 22:25 [ТС] | 7 |
Естественно. Я писал в первом посте, что это грубый пример, иллюстрирующий идею. Реальная функция имеет тип int и возвращает размерность матрицы в случае успеха или код ошибки, в случае неудачи. Т.к. два параметра возвратить нельзя, значение указателя на выделенную память передается за счет переданного функции адреса локальной переменной из main(). А насчет того, что можно запутаться согласен.
accept и alkagolik, я обязательно попробую, то что вы предложили, спасибо. На этом можно считать тему исчерпанной
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
30.10.2011, 08:28 | 8 | |||||
Сообщение от Someone_
или где ноль - в случае успеха и не ноль - в случае ошибки
0
|
30.10.2011, 08:28 | |
30.10.2011, 08:28 | |
Помогаю со студенческими работами здесь
8
Нужна помощь с реализацией программы, использующей списки и указатели Проблема с реализацией Указатели на функции. Указатели на функции как формальные параметры у функциях высшего уровня Проблема с реализацией программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |