Ошибка при передаче указателя функции - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Привет! В моем понимании приведенный ниже код должен дважды выводить одно и то же. Объясните мне, почему это не так. Код:
#include <stdio.h>
#include <stdlib.h>
 
void func(int *a, int *s);
 
int main(int argc, char *argv[]){
 
    int *array;
    int size, i;
 
    func(array, &size);
 
    for (i=0; i<size; i++)
        printf("%i\n", array[i]);
 
}
 
void func(int *a, int *s) {
    int j=0;
 
    *s = 5;
 
    a = (int *) malloc(sizeof(int) * *s);
    for(j=0; j < *s; j++)
        a[j] = j+5;
 
    for (j=0; j < *s; j++)
        printf("%i\n", a[j]);
 
}
Собственно, результат работы:
5
6
7
8
9
1412476
-1216677816
4922752
1382974
1382990

Решение задачи: «Ошибка при передаче указателя функции»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
void func(int **array, size_t *size);
 
int main(void)
{
    int *array, i;
    size_t size;
    
    func(&array, &size);
    
    for(i = 0; i < size; ++i)
        printf("%d\n", array[i]);
    
    exit(0);
}
 
void func(int **array, size_t *size)
{
    int j;
    
    *size = 5;
 
    *array = malloc(*size * sizeof **array);
    
    for(j = 0; j < *size; ++j)
        (*array)[j] = j + 5;
    
    for(j = 0; j < *size; ++j)
        printf("%d\n", (*array)[j]);
}

Объяснение кода листинга программы

  1. Объявлены две функции: func и main.
  2. В функции main выделена память под указатель array и переменную size типа size_t.
  3. Вызвана функция func с передачей указателей на array и size в качестве аргументов.
  4. В функции func выделена память под массив *array указанного размера.
  5. Выполнена итерация по всем элементам массива и каждому элементу присвоено значение j + 5.
  6. Выполнена итерация по всем элементам массива и выведено значение каждого элемента.
  7. В функции main выполнена итерация по всем элементам массива и выведено значение каждого элемента.
  8. Программа завершена с помощью exit(0).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы