Как работает функция 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; - завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д