Как работает функция malloc? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день. Кто - нибудь может рассказать как работает функция malloc ? Вот набрал код создания и вывода двумерного массива, но что-то он отказывается работать.
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)"

Решение задачи: «Как работает функция malloc?»

textual
Листинг программы
#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. tmp = (int *)malloc(n sizeof(int *)); - выделение памяти под массив указателей на int
  2. tmp[i] = (int)malloc(sizeof(int)n); - выделение памяти под массив int
  3. tmp[i][j] = rand()%10; - присваивание случайного значения элементу массива
  4. a = generate_array(n); - вызов функции генерации массива
  5. out_array(a, n); - вызов функции вывода массива
  6. free(a); - освобождение памяти, выделенной под массив
  7. system(pause); - приостановка выполнения программы до нажатия клавиши
  8. return 0; - завершение работы программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5