Ошибка при передаче указателя функции - 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]);
}
Объяснение кода листинга программы
- Объявлены две функции:
funcиmain. - В функции
mainвыделена память под указательarrayи переменнуюsizeтипаsize_t. - Вызвана функция
funcс передачей указателей наarrayиsizeв качестве аргументов. - В функции
funcвыделена память под массив*arrayуказанного размера. - Выполнена итерация по всем элементам массива и каждому элементу присвоено значение
j + 5. - Выполнена итерация по всем элементам массива и выведено значение каждого элемента.
- В функции
mainвыполнена итерация по всем элементам массива и выведено значение каждого элемента. - Программа завершена с помощью
exit(0).