Как работает функция malloc? - C (СИ)
Формулировка задачи:
Добрый день.
Кто - нибудь может рассказать как работает функция malloc ?
Вот набрал код создания и вывода двумерного массива, но что-то он отказывается работать.
Ошибка: "First chance exception at $75DE42EB. Exception class EAccessViolation with message 'Access Violation'. Process Project2.exe (6116)"
Листинг программы
- 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;
- }
Решение задачи: «Как работает функция 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;
- }
Объяснение кода листинга программы
- tmp = (int *)malloc(n sizeof(int *)); - выделение памяти под массив указателей на int
- tmp[i] = (int)malloc(sizeof(int)n); - выделение памяти под массив int
- tmp[i][j] = rand()%10; - присваивание случайного значения элементу массива
- a = generate_array(n); - вызов функции генерации массива
- out_array(a, n); - вызов функции вывода массива
- free(a); - освобождение памяти, выделенной под массив
- system(
pause
); - приостановка выполнения программы до нажатия клавиши - return 0; - завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д