Я думаю, что вы потерялись с указателями и массивами, поэтому вы не можете правильно понимать malloc (не обижайтесь, каждый, кто учится C, совершает ту же ошибку).
Давайте рассмотрим вашу основную функцию. Когда вы запускаете:
int tab[8] = {11, 2, 4, 5, 9, 7, 8, 1};
Вы статически выделяете массив из 8 целых чисел, и вы заполняете его своими номерами.
Динамический эквивалент будет:
int* tab = malloc(sizeof(int) * 8);
tab[0] = 11;
tab[1] = 2;
/// Etc...
tab[7] = 1;
Первая вещь: первый элемент массива имеет индекс 0. Таким образом, в вашей largest_element
функции, i
должны быть инициализированы в 0 вместо 1.
Причина в том, что когда вы имеете дело с массивом, вы имеете дело с указателями. В вашем случае tab
является указателем на первый элемент массива. Итак, когда вы делаете tab[3]
, вы получаете четвертый элемент вашего массива.
Второй вещь: когда вы делаете:
largest_element(&tab[8]);
Вы присылаете к вашей функции восьмого элемента после того, как начало вашего массива. Проблема в том, что вы не владеете этой областью памяти! У вас есть память только до вкладки [7].
Если вы хотите, чтобы отправить полный массив вашей функции, просто используйте:
largest_element(tab);
Теперь давайте поговорим о вашей largest_element
функции.
- Вам не нужно вызывать таНос здесь, так как память уже выделена
- Когда вы
*nbr = *(nbr + i);
изменить значение первого элемента вашего массива. Я думаю, вы хотели сделать m = *(nbr + i);
, не так ли.
- Почему вы не используете
nbr[i]
вместо *(nbr + i)
?
Правильная реализация этой функции будет что-то вроде (не проверено):
void largest_element(int *nbr)
{
int i = 0;
int max = 0;
while (i < 8)
{
if (max < nbr[i])
max = nbr[i];
i++;
}
printf("%d ", m);
}
Последняя вещь, с помощью таНос связаны с использованием функции free, чтобы освободить память, когда вы больше не нужно ,
В этом коде нет причин для вызова 'malloc'. Вы читаете из массива, не изменяя его. Кроме того, вы должны проходить в 'tab', а не' & tab [8] '. – dbush
Я пытаюсь понять, как работает malloc и как разрешить это упражнение с помощью malloc. –
Затем, пожалуйста, предоставьте определение проблемы. – szpanczyk