Помогите с программой на си

Почему после вызова функции fillingDinamicArr я ввожу размер массива и мне выводит массив и дальше ошибка: Process returned -1073741819 (0xC0000005

#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#include <time.h>


void checkMulti3(int);

void fillingArr(int*, int);

void outputArr(int*, int);

void changeArr(int*, int);

void fillingMatrix(int[][10], int, int);

void outputMatrix(int[][10], int, int);

int sumElMatrix(int[][10], int, int, int, int);

void fillingDinamicArr(int*, int, int*, int*);

int main() {
    setlocale(LC_ALL,"Rus");

    int num;
    printf("Введите целое число:");
    scanf("%d",&num);
    checkMulti3(num);

    int n;
    printf("Введите размер массива:");
    scanf("%d",&n);

    int array[n];
    fillingArr(array, n);
    outputArr(array, n);
    changeArr(array, n);
    outputArr(array, n);

    int sumRow,sumCol;
    printf("Введите номер строки и столбца для подсчета суммы"
           " отрицательных элементов(НЕ БОЛЬШЕ 10!!!):");
    scanf("%d", &sumRow);
    scanf("%d", &sumCol);
    sumRow -= 1;
    sumCol -= 1;

    int matrix[10][10];
    fillingMatrix(matrix, 10, 10);
    outputMatrix(matrix, 10, 10);
    printf("%d\n", sumElMatrix(matrix, 10, 10, sumRow, sumCol));

    int size;
    printf("Введите размер массива:");
    scanf("%d", &size);
    int arr[size];
    size--;

    int dinamicSize = 0;
    int* a = malloc(0);

    fillingArr(arr, size);
    outputArr(arr, size);
    fillingDinamicArr(arr, size, *a, &dinamicSize);
    dinamicSize--;
    outputArr(a, dinamicSize);
}

void checkMulti3(int num) {
    if (num%3 == 0)
        printf("Число делится на 3");
    else
        printf("Число не делится на 3");
    printf("\n");
    return;
}

void fillingArr(int* array, int n) {
    for(int i = 0; i < n; i++)
        array[i] = rand() % 21 - 10;
}

void outputArr(int* array, int n) {
    for(int i = 0; i < n; i++) {
        printf("%d\t ", array[i]);
    }
    printf("\n");
    return;
}

void changeArr(int* array, int n) {
    for(int i = 0; i < n; i++)
        if (array[i]%5 == 0)
            array[i] = 0;
    return;
}

void fillingMatrix(int matrix[][10], int row, int col) {
    for(int i = 0; i < row; i++) {
        for(int j = 0; j < col; j++)
            matrix[i][j] = rand() % 21 - 10;
    }
}

void outputMatrix(int matrix[][10], int row, int col) {
    for(int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++)
        {
           printf("%d\t", matrix[i][j]);
        }
        printf("\n");
    }
}

int sumElMatrix(int matrix[][10], int row, int col, int sumRow, int sumCol) {
    int sum = 0;
    for(int i = 0; i < row; i++)
        if (matrix[i][sumCol] < 0)
            sum += matrix[i][sumCol];
    for(int i = 0; i < col; i++)
        if (matrix[sumRow][i] < 0)
            sum += matrix[sumRow][i];
    if (matrix[sumRow][sumCol] < 0)
        sum -= matrix[sumRow][sumCol];
    return sum;
}

void fillingDinamicArr(int* arr, int size, int* finishArr, int *dinamicSize) {
    int n = 0;
    if (arr[0] < arr[1])
    {
        n++;
        realloc(finishArr, sizeof(int)*n);
        finishArr[n-1] = arr[0];
    }
    for (int i = 1; i < size; i++) {
        if ((arr[i] < arr[i+1]) || (arr[i] > arr[i-1]))
        {
            n++;
            realloc(finishArr, sizeof(int)*n);
            finishArr[n-1] = arr[i];
        }
    }
    if (arr[size] > arr[size-1])
    {
        n++;
        realloc(finishArr, sizeof(int)*n);
        finishArr[n-1] = arr[size];
    }
}


Ответы (1 шт):

Автор решения: Harry

Что вы в него обещаете передать?

void fillingDinamicArr(int* arr, int size, int* finishArr, int *dinamicSize)

А что передаете?

int* a = malloc(0);
....
fillingDinamicArr(arr, size, *a, &dinamicSize);

По сути передаете не указатель, а разыменованное значение указателя (число int), да и указатель при этом указывает — куда? malloc(0) может возвращать разные вещи, ибо сказано:

If size is zero, the behavior of malloc is implementation-defined. For example, a null pointer may be returned.

И что вы получите при разыменовании нулевого указателя? Или при использовании вместо указателя какого-то мусорного значения?

Будьте внимательны!

→ Ссылка