Компилятор не выдает предупреждения без причины:
warning: passing argument 1 of 'memset' makes pointer from integer without a cast
expected 'void *' but argument is of type 'int'
Это означает, что вы не передаете правильный тип первому аргументу memset()
, что действительно хочет указатель , в то время как вы передаете целое число .
Ваш указатель A
в порядке, разыменование (*A
) не требуется и неправильно, правильный вызов:
memset(A, 5, n * sizeof(*A));
Что еще более важно, это не то, что вы хотите сделать! Если вы думаете, что выше устанавливает все элементы выделенного массива на 5
, это не так. Вместо этого memset()
устанавливает каждый байт на 5
(см. справочную страницу ). Так как int
больше одного байта (обычно 4), это заполнит ваш массив значением 0x05050505
(десятичное 84215045
) вместо 5
.
, чтобы установить каждый элемент на 5
вам понадобится for
l oop:
int i = 0;
for (i = 0; i < n; i++)
A[i] = 5;
Наконец, не приведите возвращаемое значение malloc()
:
A = malloc(sizeof(*A) * n);