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

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

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

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

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int ** generate_array(int n)
  6. {
  7.    int ** tmp;
  8.    srand((unsigned)time(NULL));
  9.    tmp = (int **)malloc(n * sizeof(int *));
  10.    for (int i = 0; i < n; i++)
  11.       tmp[i]=(int*)malloc(sizeof(int)*n);
  12.    for(int i=0; i<n; i++)
  13.       for(int j=0; j<n; j++)
  14.         tmp[i][j] = rand()%10;
  15.    return tmp;
  16. }
  17.  
  18.  
  19.  
  20. void out_array(int **a, int n)
  21. {
  22.    for (int i = 0; i < n-1; i++)
  23.    {
  24.       for(int j=0; j<n-1; j++)
  25.          printf("%d ", a[i][j]);
  26.       printf("\n");
  27.    }
  28. }
  29.  
  30.  
  31. int main( )
  32. {
  33.         int n; int **a;
  34.         printf( "Vvedite razmer massiva: ");
  35.         scanf("%d",&n);
  36.         a = generate_array(n);
  37.         out_array(a, n);
  38.         printf("\n");
  39.         free(a);
  40.         system("pause"); //
  41.         return 0;
  42. }

Объяснение кода листинга программы

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут