56 / 56 / 14
Регистрация: 02.03.2010
Сообщений: 407
1

Как работает функция malloc?

14.12.2010, 12:57. Показов 5660. Ответов 4
Метки нет (Все метки)

Добрый день.
Кто - нибудь может рассказать как работает функция malloc ?

Вот набрал код создания и вывода двумерного массива, но что-то он отказывается работать.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void generate_array(int **a, int n)
{
srand((unsigned)time(NULL));
a=(int **)malloc(n * sizeof(int *));
for (int i = 0; i < n; i++)
  a[i]=(int*)malloc(sizeof(int)*n);
  for(int i=0; i<n; i++)
   for(int j=0; j<n; j++)
    a[i][j] = rand()%10;
 
}
 
 
 
void out_array(int **a, int n)
{
for (int i = 0; i < n-1; i++)
 for(int j=0; j<n-1; j++)
 printf("%d ", a[i][j]);
 printf("\n");
}
 
 
int main( )
{
    int n; int **a;
    printf( "Vvedite razmer massiva: ");
    scanf("%d",&n);
    generate_array(a,n);
    out_array(a,n);
    printf("\n");
    system("pause");
    return 0;
}
Ошибка: "First chance exception at $75DE42EB. Exception class EAccessViolation with message 'Access Violation'. Process Project2.exe (6116)"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2010, 12:57
Ответы с готовыми решениями:

Как в приведенном коде работает malloc?
#include &lt;stdio.h&gt; #include &lt;memory.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include...

Почему malloc работает не так, как ожидается?
int main() { int* p =malloc(sizeof(int)); p=5; printf(&quot;%s\n&quot;,strerror(errno)); ...

Своя функция malloc
В процессе написания сапера я пользовался функцией malloc для выделения памяти. Я копался в...

Функция malloc() - найти разницу между двумя реализациями
Добрый вечер. Скажите, пожалуйста, есть ли разница между записями:...

4
899 / 793 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
14.12.2010, 13:16 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
 
void generate_array(int **a, int n)
{
for (int i = 0; i < n; i++)
  a[i]=(int*)malloc(sizeof(int)*n);
for(int i=0; i<n; i++)
{
   for(int j=0; j<n; j++)
   {
        a[i][j] = rand()%10;
   }
}
 
}
 
 
 
void out_array(int **a, int n)
{
for (int i = 0; i < n; i++)
  {
     for(int j=0; j < n; j++)
      {
         printf("%d ", a[i][j]);
      }
     printf("\n");
  }
}
 
 
int main( )
{
        int n; int **a;
        printf( "Vvedite razmer massiva: ");
        scanf("%d",&n);
        srand((unsigned)time(NULL));
        a=(int **)malloc(n * sizeof(int *));
        generate_array(a,n);
        out_array(a,n);
        printf("\n");
        system("pause");
        return 0;
}
1
3219 / 2511 / 285
Регистрация: 11.03.2009
Сообщений: 5,714
14.12.2010, 13:49 3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int ** generate_array(int n)
{
   int ** tmp;
   srand((unsigned)time(NULL));
   tmp = (int **)malloc(n * sizeof(int *));
   for (int i = 0; i < n; i++)
      tmp[i]=(int*)malloc(sizeof(int)*n);
   for(int i=0; i<n; i++)
      for(int j=0; j<n; j++)
        tmp[i][j] = rand()%10;
   return tmp;
}
 
 
 
void out_array(int **a, int n)
{
   for (int i = 0; i < n-1; i++)
   {
      for(int j=0; j<n-1; j++)
         printf("%d ", a[i][j]);
      printf("\n");
   }
}
 
 
int main( )
{
        int n; int **a;
        printf( "Vvedite razmer massiva: ");
        scanf("%d",&n);
        a = generate_array(n);
        out_array(a, n);
        printf("\n");
        free(a);
        system("pause"); //
        return 0;
}
1
56 / 56 / 14
Регистрация: 02.03.2010
Сообщений: 407
14.12.2010, 13:55  [ТС] 4
Спасибо конечно за коды, но все же в чем ошибка? И в чем разница их? Мне важно научиться это делать)
0
3219 / 2511 / 285
Регистрация: 11.03.2009
Сообщений: 5,714
14.12.2010, 14:09 5
Саму функцию используешь правильно, а вот про области видимости переменных забыл.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2010, 14:09
Помогаю со студенческими работами здесь

Не работает malloc
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; void create(int *x); int main() { int *x,i;...

В чем разница между malloc() и (char *)malloc()
Прошу помочь разобраться: не могу понять в чем разница междуs=malloc(sizeof(char)); иs=(char...

Malloc в процедуре - почему не работает передача указателя
Доброго времени суток, есть такой код: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; void getInput...

Как работает функция?
Обьясните как работает эта функция: void SearchFam(char *Parametr, FILE *out) { char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru