IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Динамический массив, Язык Си
Rocket
сообщение 17.11.2007 20:56
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Прогорамма для работы с динамическим массивом размерностью три:

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

int*** create(int n, int m, int k)

 {  int  ***m3,i,j;
    m3=(int***)malloc(n*sizeof(int**));
    for(i=0;i<n;i++)
    {
     m3[i]=(int**)malloc(m*sizeof(int*));
     for (j=0;j<m;j++)
     {
      m3[i][j]=(int*)malloc(k*sizeof(int));
    }
  return m3;

 }

void kill(int ***m3,int n, int m)
 { int i,j;
   for (i=0;i<n;i++)
  { for (j=0;j<m;j++)
    free(m3[i][j]);
  }
    free(m3);
 }

void fill(int ***m3,int n, int m, int k)

 {  int i,j,y;
    for (i=0;i<n;i++)
     for (j=0;j<m;j++)
      for (y=0;y<k;y++)
    m3[i][j][k]=rand()%100;
 }
void show(int ***m3,int n,int m, int k)

 { int i,j,y;
   for (i=0;i<n;i++)
   {
    for (j=0;j<m;j++)
     { for (y=0;y<k;y++)
       printf("%3d",m3[i][j][y]);
       printf("\n");
     }
   }
 }

int main()

{ clrscr();
  int ***m3=create(4,3,2);
  fill(m3,4,3,2);
  show(m3,4,3,2);
  kill(m3,4,3);
  return 0;
}



Реализованы функции для выделения динамического массива, заполнения, вывода и освобождения памяти.
Помогите пожалуйста найти в чём ошибка?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
volvo
сообщение 17.11.2007 21:39
Сообщение #2


Гость






Цитата
в чём ошибка?
Ошибка - в том, что у тебя в create не хватает одной закрывающей фигурной скобки... Если наконец-то когда-нибудь научитесь писать с нормальными отступами, то сразу будет видно, где именно. Вот тут, например:
int*** create(int n, int m, int k) {
    int  ***m3,i,j;
    m3=(int***)malloc(n*sizeof(int**));
    for(i=0;i<n;i++) {
        m3[i]=(int**)malloc(m*sizeof(int*));
        for (j=0;j<m;j++) {
            m3[i][j]=(int*)malloc(k*sizeof(int));
        }
    }
    return m3;
}

все скобки на месте, а в твоем исходнике попробуй найти сам, где именно надо ее добавить.
 К началу страницы 
+ Ответить 
Rocket
сообщение 17.11.2007 23:14
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 17.11.2007 22:39) *

Ошибка - в том, что у тебя в create не хватает одной закрывающей фигурной скобки... Если наконец-то когда-нибудь научитесь писать с нормальными отступами, то сразу будет видно, где именно. Вот тут, например:
int*** create(int n, int m, int k) {
    int  ***m3,i,j;
    m3=(int***)malloc(n*sizeof(int**));
    for(i=0;i<n;i++) {
        m3[i]=(int**)malloc(m*sizeof(int*));
        for (j=0;j<m;j++) {
            m3[i][j]=(int*)malloc(k*sizeof(int));
        }
    }
    return m3;
}

все скобки на месте, а в твоем исходнике попробуй найти сам, где именно надо ее добавить.

Да, точно, нашел, спасибо)
Вот только ещё одно: что программа выводит?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.11.2007 1:13
Сообщение #4


Гость






Цитата
что программа выводит?
Как заполнил, так и выводит smile.gif

У тебя опять ошибка, причем не одна:
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>


int*** create(int n, int m, int k) {
    int  ***m3,i,j;
    m3=(int***)malloc(n*sizeof(int**));
    for(i=0;i<n;i++) {
        m3[i]=(int**)malloc(m*sizeof(int*));
        for (j=0;j<m;j++) {
            m3[i][j]=(int*)malloc(k*sizeof(int));
        }
    }
    return m3;
}

void kill(int ***m3,int n, int m) {
    int i,j;
    for (i=0;i<n;i++) {
        for (j=0;j<m;j++) free(m3[i][j]);
        free(m3[i]); /* Вот этого не было */
    }
    free(m3);
}

void fill(int ***m3,int n, int m, int k) {
    int i,j,y;
    for (i=0;i<n;i++)
        for (j=0;j<m;j++)
            for (y=0;y<k;y++)
                m3[i][j][y]=rand()%100; /* <--- Здесь у тебя было [i][j][k] */
}

void show(int ***m3,int n,int m, int k) {
    int i,j,y;
    for (i=0;i<n;i++) {
        printf("dimension 3\n"); /* А это я добавил, чтоб было понятнее */
        for (j=0;j<m;j++) {
            for (y=0;y<k;y++) printf("%3d",m3[i][j][y]);
            printf("\n");
        }
    }
}

int main(void)
{
  clrscr();
  static int ***m3;
  m3 = create(4,3,2);
  fill(m3,4,3,2);
  show(m3,4,3,2);
  kill(m3,4,3);
  return 0;
}

 К началу страницы 
+ Ответить 
Rocket
сообщение 18.11.2007 11:51
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Большое спасибо за помощь=)

Сообщение отредактировано: volvo - 14.01.2009 10:10
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 18.07.2025 21:33
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"