Как работает функция 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; - завершение работы программы