![]() |
|
Модераторы: bsa |
![]()
|
|
| voral |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.3.2008 Где: Иваново Репутация: нет Всего: нет |
Что ожидалось от этих функций я догадался. Но беда в том, что только в функции comp и subzero может попасть массив из-вне. В main, input и out переменные, ссылающиеся на массив, хоть и называются одинаково. Тем не менее это совершенно разные переменные. И только в input эта переменная ссылается на выделенный кусок памяти. В остальных случаях идет обращение к мусору и как результат сегфолт. Почитай внимательно по ключевой фразе "область видимости". В твоем коде по сути нет ошибок с "выделением динамической памяти" как таковым. Основные ошибки: 1 непонимание области видимости переменных 2. расстановка точки с запятой где ни попадя. Пример:
В результате этого кода будет выведено 1 раз слово "first" и 4 раза слово "second" В итоге в input у тебя выделяется память под массив массивов. И один раз (вместо 3) для массива. Да нашел. Эта функция вызывается из цикла по i. А i передается в функцию в качестве параметра. |
|||
|
||||
| krot100500 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 26.12.2011 Репутация: нет Всего: нет |
т.е как я понял для того чтобы функция "работала с массивом a[i][j]", к примеру, subzero должна иметь параметр не (int i), а (int a) и соответственo нужно вводить 2-й for?
|
|||
|
||||
| voral |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.3.2008 Где: Иваново Репутация: нет Всего: нет |
Как раз subziro у тебя все правильно принимает в качестве параметра указатель на массив массивов переданный из функции main. Беда в том, что в ф-ии main переменная а ни на чего не указывает. Короче вот почти твой код с коментариями. У меня не винда, так что не прверял виндозависимые строки, но дожно быть все ок.
Это сообщение отредактировал(а) voral - 27.12.2011, 23:36 |
|||
|
||||
| krot100500 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 26.12.2011 Репутация: нет Всего: нет |
как я понял строка 3 вводит указатель mainArray и присваевает ему значение input(который сам по-сути является именем-указателем функции) строка 4 придает функции out параметр mainArroy, и благодаря этому функция out будут работать как-бы с массивом из input а вот дальше чуток уже напряжка) с момента инициальзации i; мы получается освобождаем память от mainArroy или от input на которую она и является указателем? |
|||
|
||||
| krot100500 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 26.12.2011 Репутация: нет Всего: нет |
Чуть не забыл: чтобы функция к примеру comp работала с моим массивом что нужно сделать? а то написал а он при любых раскладах выдает результат 1 и все*(
как нас учили первые 2 строки должны быть такими:
Добавлено через 10 минут и 9 секунд Чуток пораскинув своим упрямым мозгом пришла мысль:
у нас тут как раз и присваиваются значения? и чтобы comp работала с моим массивом надо её так-же объявлять? Это сообщение отредактировал(а) krot100500 - 28.12.2011, 22:14 |
||||||
|
|||||||
| voral |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.3.2008 Где: Иваново Репутация: нет Всего: нет |
Передача параметра у вас была правильно сделана в первом варианте ф-ии comp. Ваш второй вариант этой ф-ии говорит о том что вы совершенно не просекли разницы между вашей ф-ией out и моей. К тому же у вас отсутствует цикл по j. В том моем коде в начале топика есть цикл по обоим индексам, хотя в приведенной вами функции только по одному. Но на то были причины. У вас же цикл только по одному индексу. А j может принять, на момент использование, совершенно разное значение, которое зависит "от фазы луны и расположния звезд"....
Вообще, думаю, для вас самый быстрый метод понимание и решения вашей ошибки в этой задаче. Будет внимательное прочтение книги Кернигана и Ритчи "Язык программирования Си" (с первой страницы). У вас проблемы не с указателями и выделением памяти, а в еще более базовых понятиях. Вы слишком спишите. Указатели вам пока рано. Я б, конечно мог, разжевать данный конкретный пример. Но одно из двух: либо вы все равно ни чего не поняли либо мне бы пришлось почти полностью здесь воспроизвести вышеупомянутую книгу (по крайней мере до указателей) |
|||
|
||||
| krot100500 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 26.12.2011 Репутация: нет Всего: нет |
у меня он есть тока в другом ... не в том который скинул*) а спишу ибо застрял с этой задачкой*( это курсовое задание на выполнение которого осталось 1 ночь и 2 дня) бьюсь я с ним уже месяц, прочитал книгу Герберта Шилдта но там слишком непонятно... методичку от нашего препода- там ошибка на ошибке, которые вижу даже я))) что уж говорить о лекциях) ЗЫ язык си у нас начался совсем недавно) для примера мы написали пока-что 4-ре лабы) 1)прога для вывода на экран "привет мир"*) . . . 4)прога для рандомного заполнения масива 5 на 5) а курсовая работа совершенно другово порядка) Книгу Кернига скачал вчера пока не читал*печаль* |
|||
|
||||
| krot100500 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 26.12.2011 Репутация: нет Всего: нет |
Прочитал Кернигана(не всего) и вот что получилось печаль в том что прога вылетает*( все та-же печаль с указателем |
|||
|
||||
| krot100500 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 26.12.2011 Репутация: нет Всего: нет |
не тот выкинул*)
|
|||
|
||||
| voral |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.3.2008 Где: Иваново Репутация: нет Всего: нет |
Жесть. У вас stroka - это не переменная типа int!!! Это указатель. И операция stroka = stroka + 1 означает что вы смещаете укзатедь в памяти
|
|||
|
||||
| krot100500 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 26.12.2011 Репутация: нет Всего: нет |
3-е сутки без сна дают о себе знать) я запустил прогу она брякнулась но не сохранил*((
int main(void)
вопросик: в func передан индекс массива i? т.е. если не выходя из блока main я буду использовать func я буду использовать как бы массив i? или нужно будет делать это так
а то как то в литературе непонятно) или это бессоница?*) Это сообщение отредактировал(а) krot100500 - 30.12.2011, 02:48 |
||||
|
|||||
| krot100500 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 26.12.2011 Репутация: нет Всего: нет |
Я ВКУРИЛ!!!!!Еххааа Voral СПАСИБИЩЕ!!!)
метод проб и ошибок рулит))) я заного прочитал все в этом топике и на 10 раз пришла истина*)
Это сообщение отредактировал(а) krot100500 - 30.12.2011, 03:19 |
|||
|
||||
| krot100500 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 26.12.2011 Репутация: нет Всего: нет |
Печаль случилась*((( при увеличении массива до 8Х8 выдает фейловые рез-ты
ошибку не найти*( постинкримент изменил на прединкремент(comp ф-я) |
|||
|
||||
| voral |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.3.2008 Где: Иваново Репутация: нет Всего: нет |
Если бы вы очень внимательно сравнили свою исходную функцию out и мой вариант. То у вас бы в коде было на две серьезных ошибки меньше. Править не буду, но прокомментирую ваш код:
Добавлено через 8 минут и 4 секунды Еще раз повторю: в последнем ваше коде переменная a в функции main, переменная a в функции comp и переменная a в функции sum это абсолютно разные переменные ни когда не обменивающиеся значениями. И лишь по теории случайности с вероятностью 1 к бесконечности могут указать на один и тот же адрес в памяти и в этом случае возможно ваша программа отработает правильно. Добавлено через 13 минут и 53 секунды
Он рулит ровно до тех пор пока вы не осознаете, что самый быстрый путь - зачастую самый длинный. Читайте Кернигана и Ритчи! Если бы вы сразу после первого поста начали чтение вы бы уже впитали те главы, что достаточны для решения вышей задачи. И сейчас бы уже имели готовое решение. |
||||
|
|||||
| krot100500 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 26.12.2011 Репутация: нет Всего: нет |
Спасибки еще раз что потратил стока времени на объяснения) Мне это все-равно не помогло*( через годик, примерно ,вернусь разбирать заного, если голову не отобьют и востановят в универе(
|
|||
|
||||
![]()
|
| Правила форума "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. |