Помогите с программой на си
Почему после вызова функции 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.
И что вы получите при разыменовании нулевого указателя? Или при использовании вместо указателя какого-то мусорного значения?
Будьте внимательны!