![]() |
|
Модераторы: bsa |
![]()
|
|
| Асоишница |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 13.3.2012 Репутация: нет Всего: нет |
Добрый день. Программа запускается, но не работает- позволяет только ввести первое из всего необходимого(Задание:
Описать процедуру ArrayToMatrix1(A, K, M, N, B), формирующую по вещественному массиву A размера K матрицу B размера M × N (матрица заполняется элементами массива A по строкам). «Лишние» элементы массива игнорируются; если элементов массива недостаточно, то оставшиеся элементы матрицы полагаются равными 0. Двумерный массив B является выходным параметром. С помощью этой процедуры на основе данного массива A размера K и целых чисел M и N сформировать матрицу B размера M × N.). Я пока написала это в main, чтоб если что не было ошибок из-за неправильного оформления процедуры.)
подскажите пожалуйста, что не так |
|||
|
||||
| feodorv |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Значение переменной N ещё не задано. А задаёте его значительно позже: (мне, правда, не понятно, как scanf будет работать с шаблоном %d%d). Нужно строчки с malloc перенести ниже строчки со scanf, или строчку со scanf перенести выше строчек с malloc Ещё: В - это массив массивов, поэтому нужно соблюдать размерность элементов этого массива масивов:
Именно sizeof(int *), а не sizeof(int). И ещё: Если M - число строк, то нужно
То есть M, а не N. Ну, В Вы освободили. А элементы B (то есть B[0]...B[M-1])? Остальное даже не смотрел... Это сообщение отредактировал(а) feodorv - 12.5.2012, 00:42 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||
|
|||||||
| Асоишница |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 13.3.2012 Репутация: нет Всего: нет |
так и не поняла, что не так....думала, освобождается всё, что касается В...... но вообще спасибо- с Вашей помощью заработало.=))))))правда там ещё кое-что поисправлять надо было) Это сообщение отредактировал(а) Асоишница - 12.5.2012, 19:12 |
|||
|
||||
| feodorv |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Зачем M*N*sizeof(int*) когда M*sizeof(int*) достаточно? Ну а здесь зачем M, когда N нужно; зачем int*, когда нужно просто int? Поскольку B - это массив массивов, то
Этим мы выделяем память под М элементов, каждый из которых имеет тип int* (то есть указатель на массив интегер-переменных). А вот B[i] - это просто массив целочисленных величин, поэтому
Этим мы выделяем память под N штук интегеров. В чём проявляется эта корявость?
Всё? Смотрим выделение памяти: Смотрим высвобождение памяти: И всё? Вы думаете free(B); высвободит за Вас все B[i]? На каждый malloc должен быть свой free -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||
|
|||||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |