![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| intel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Здравствуйте.
Есть такая функция:
Проблема в том что если я передаю в неё массив размера size, где size меньше MAX_SIZE, то она перестаёт коректно работать, то бишь выдаёт пару значений из массива и много муссора. В этот самый мусор и есть моя проблема - откуда он?! Подскажите, ребят Это сообщение отредактировал(а) intel - 28.10.2009, 21:22 |
|||
|
||||
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
В с++ не силен.
Но как я понемаю масив у тебя лежит в памяти и функция читает по указаннаму адресу масив данных размером 8 баит * size. А так как в памяти после твоего масива идёт какаято другая инфа. то компьётер читает её пока на дойдет до нужного места (начал масива + size) -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
intel, как вызываешь показывай, и откуда буфер берешь с данными тоже
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| intel |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
создаю и заполняю массив:
Вот так вызываю:
Всё происходит в мэйне. Пишу на Dev-C++ |
||||
|
|||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Так делать вообще нельзя.
По логике должно выдавать правильно первые n элементов. Странно, что это компилируется. ИМХО Терпеть не могу статические массивы Размеры массивов передаваемого и в прототипе функции должны совпадать. |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Это сообщение отредактировал(а) andrew_121 - 29.10.2009, 09:07 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
||||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
-------------------- ![]() |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Вот только я не понял, почему в том коде контейнеров нет? -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
Anikmar, почему это нельзя?
все работает штатно, как и должно быть. У автора где-то портится память очевидно? -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
А почему не использовать контейнеры? и: наверное все же так:
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Из-за специфики ТС. Думаю его нельзя было озадачивать контейнерами)) -------------------- ![]() |
|||
|
||||
| intel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Прошу прощения, Модеры, что поднимаю уже на сто раз разжёванную тему, но к сожалению после долгих хождений по форумам я так ничего и не нашёл.
Спасибо за комментарии и советы, но всётаки вопрос остаётся открытым. Постараюсь описать по подробнее. В общем дана довольно-таки простенькая задачка: Напишите функцию, которая вычисляет детерминанту матрицы размером N x N, где N define-константа. Функция имеет следующий прототип:
Побегал по форумам и пришёл к выводу, что реализовать это дело рекурсивно было бы самым изящным и наглядным способом. Значит так; вот что я тут накумекал: Создаю матрицу размером N, передаю в функцию get_det(matrix, N), которая создаёт tmp-матрицу размером (size-1)*(size-1), заполняет её значениями из переданной матрицы (без 0. строки и i. столбца) и вызывает саму себя, но уже с tmp-матрицей размером (size-1)x(size-1), size-1 и т.д. пока size > 1. Вот тут то и весь геморой, то бишь в прототипе размер матрицы равен N x N, а передаю (N-1) x (N-1) (первый рекурс-вызов)!! Надеюсь ход мыслей понятен. Объяснил как мог. Господа Прогеры, может у вас есть более простое решение?, а то у меня после явы при виде статических массивов и указателей, волосы дыбом встают. Спасибо |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот Вам пример по рекурсивному заполнению статического массива, может поможет разобраться в вопросе :
Это сообщение отредактировал(а) mes - 29.10.2009, 21:03 |
||||
|
|||||
| 17dufa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 2.3.2006 Репутация: 3 Всего: 5 |
я подозреваю, что двумерный массив matrix[N][N] при компиляции становится одномерным. как следствие matrix[1][2] на самом деле будет matrix[1*N+2]. так как в вызываемой функции и вызывающей разные значения N получается бардак при адресации (положим в вызывающей N = 5, тогда matrix[1][2] на самом деле matrix[7], а в вызываемой N = 10 и как следствие matrix[1][2] на самом деле становится matrix[12]). не хотите контейнеров - используйте двойной указатель и динамическое выделение памяти.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |