Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблеммы с int **, help! 
:(
    Опции темы
HELPER
  Дата 23.4.2005, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 18.4.2005

Репутация: -2
Всего: -2



smile smile smile
Людиииииии!!! Срочно!!! Вот фрагмент проги:
Код

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void mFill(int **mtr, int N);            //vvod matricu
void mShow(int **mtr, int N);            //vivod
void mColMove(int **mtr, int N);        //pomenyat 1 i posl stolbec
int mMax(int **mtr, int N);            //max element

int main(void)
{
   int **m, n;
   printf("Enter matrix size: ");
   scanf("%i",&n);
   size_t s = n*n*sizeof(int);
   m = (int **)malloc(s);
   mFill(m,n);
   mShow(m,n);
   //mColMove(m,n);
   //printf("\n\rMax element is %i",mMax(m,n));
   getch();
   return 0;
}

void mFill(int **mtr, int N)            //vvod matricu
{
    int cy = wherey();
    for(int i = 0; i < N; i++)
    for(int j = 0; j < N; j++)
       {
        gotoxy((j+1)*3,cy+i+1);
        scanf("%i",&mtr[i][j]);
    }
    printf("\n\r");
}

Она в функции mFill(int **mtr, int N) вылетает на вводе 9 числа, не просто, а появляется
всем знакомая табличка:
exemple1.exe вызвало ошибку и будет закрыто...бла бла бла...Отрпавить отчет???
и ето [censored33! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме] вылетает ровно три раза перед тем как окно с прогой закроется, я чето не в теме,
а вы?? Помогите разобратся..., компилятор BCW 5.02 (Borland) При компиляции 0 варнингов, так что...
HELP! HELP! smile Только срочно!!!
Добавлено @ 18:45
На 9 символе если размер задаю 4х4
PM MAIL   Вверх
HELPER
Дата 23.4.2005, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 18.4.2005

Репутация: -2
Всего: -2



НАРОД, НУ ХОТЬ ДОГАДКАМИ ПОДЕЛИТЕСЬ!!!
PM MAIL   Вверх
Void
Дата 23.4.2005, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Кто указатели инициализировать будет? int** сам по себе матрицей не является пока не...
Код

   printf("Enter matrix size: ");
   scanf("%i",&n);
   size_t s = n*n*sizeof(int) + n * sizeof(int*); // !
   m = (int **)malloc(s);
   for (size_t i = 0; i < n; ++i)
     m[i] = (int*)(m + n) + i * n; // !
   mFill(m,n);
   mShow(m,n);


Начальная часть выделенного куска размером n * sizeof(int*) - массив указателей на строки матрицы, причем i-я строка имеет смещение i * n * sizeof(int) + n * sizeof(int*) от начала блока.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Дрон
Дата 23.4.2005, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 92



А по-моему, проще исправить
Код

 scanf("%i",&mtr[i][j]);

на
Код

 scanf("%i", mtr+i*N+j);

и вместо int** везде использовать int*
smile


--------------------
Да. Именно так.
PM   Вверх
Void
Дата 23.4.2005, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Дрон
Думаю, HELPER'у не захочется потом везде в коде (помимо ф-ции mFill) m[i][j] заменять на *(m + i * N + j) smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
HELPER
Дата 23.4.2005, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 18.4.2005

Репутация: -2
Всего: -2



Народ, всем спасибо все свободны =))), тебе
Void особенное!!!
Добавлено @ 19:57
size_t s = n*n*sizeof(int) + n * sizeof(int*); ???
матрица просто квадратная, а знасит:
size_t s = n*n*sizeof(int);
PM MAIL   Вверх
Ggamhat
Дата 24.4.2005, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 24.4.2005

Репутация: нет
Всего: нет



Мой брат говорит: "Не знаешь как правильно написать - перефразируй." Зачем создать указатель на указатель, если в любом случае двумерный массив можно представить одномерным?
PM MAIL   Вверх
Дрон
Дата 24.4.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 92



HELPER
Цитата(HELPER @ 23.4.2005, 20:51)
size_t s = n*n*sizeof(int) + n * sizeof(int*); ???
матрица просто квадратная, а знасит:
size_t s = n*n*sizeof(int);

Нет.
У Void всё правильно написано.



--------------------
Да. Именно так.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.