После ввода 10 значений на выходе получается 6474931, то есть начальное значение?
Это потому, что переменная sum
не инициализирована, по умолчанию он содержит некоторые ненужные данные из-за автоматического хранения.
Инициализируйте его с нуля.
long sum = 0;
Также здесь
pi = (int *)malloc(10 * sizeof(int));
приведение типов malloc()
необязательно, так как malloc()
тип возвращаемого значения void*
тип и он безопасно конвертируется в нужный тип указателя автоматически.Например,
pi = malloc(10 * sizeof(*pi));
if(pi == NULL) {
/* @TODO error handling */
}
Do Read Разыгрывать ли я результат malloc?
Также здесь
scanf("%d", pi + 1);
sum += *(pi + 1);
, который вы хотели использовать pi + i
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * [10] * * * * * * 10 * * * * * * * * * 10 * * * * * * * * * * * * * * * * * * * * * * *.Поэтому измените его на
scanf("%d", pi + i);
sum += *(pi + i);
Пример кода:
int main(void) {
long sum = 0;
int *pi = malloc(10 * sizeof(*pi));
if(pi == NULL) {
/* @TODO Error Handling */
}
printf("\n\nPlease put in 10 values.\n\n");
for(int i = 0; i < 10; i++) {
printf("%d. Value: ", i + 1);
scanf("%d", pi + i);
sum += *(pi + i);
}
printf("\nSum of dynamic allocated memory: %ld", sum);
free(pi);
return 0;
}
O / p:
Пожалуйста, введите 10 значений.
- Значение: 1
- Значение: 2
- Значение: 3
- Значение: 4
- Значение: 5
- Значение: 6
- Значение: 7
- Значение: 8
- Значение: 9
- Значение: 10
Сумма динамически выделенной памяти: 55