У меня возникли проблемы с использованием команды malloc/realloc с массивами. Я создал небольшой массив с некоторыми целыми числами и попытался добавить к нему одно значение, увеличив размер с помощью realloc и добавив значение, но когда я это делаю, значение индекса 0 не сохраняется и рассматривается как мусор.
#include <stdio.h>
#include <stdlib.h>
int main(){
int n;
printf("Enter size of array\n");
scanf("%d",&n);
int *A = malloc(n*sizeof(int));
for(int i = 0; i < n; i++){
A[i] = i + 1;
}
*A = realloc(A, sizeof(A)+ sizeof(int));
A[n] = 1234;
for(int i = 0; i < n + 1; i++){
printf("%d\n",A[i]);
}
return 0;
}
и когда я запускаю программу, это происходит:
Enter size of array
5
14643216
2
3
4
5
1234
Кто-нибудь знает, почему индекс 0 массива получает это значение, а не 1?
*A = realloc(A
— ерунда как с точки зрения времени выполнения, так и с точки зрения типа. Вы говорите, перераспределитеA
, получив новый указатель. Затем сохраните этот указатель в первый элемент старогоA
(который может совпадать или не совпадать с новым A).*A
имеет типint
, поэтому вы должны увидеть диагностическое сообщение о том, что возвращаемый типvoid *
изrealloc
преобразуется вint
без приведения. - person Kaz   schedule 14.03.2018A
— это переменная типа указателя,*A
— это значение, на которое указывает указательA
, в данном случае — первый элемент массива. Таким образом, изменение*A
фактически меняет первый элемент этого массива, а не сам указатель. - person Havenard   schedule 14.03.2018malloc
это работает, потому что*
интерпретируется не как модификаторA
, а как модификатор типа, поскольку вы объявляете его в той же строке. - person Havenard   schedule 14.03.2018