-2
Следующий код - это решение проблемы поиска дружественных пар между номерами ввода. Я еще не знаю, насколько наилучшим может быть алгоритм, но в чем заключается моя проблема, так это то, что приведенный ниже код продолжает возвращать ошибку сегментации: 11. Я проверяю, и он даже не попадает в цикл for в функции readNums
. Какие-либо предложения, что не так?Получение ошибки сегментации: 11 в C. Почему?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
/*saves memory for a given length */
int *saveMemory(int sz) {
int *ptr = calloc(sz, sizeof(int));
if (ptr == NULL) {
printf("Error: memory allocation failed (out of memory?).\n");
exit(-1);
}
return ptr;
}
int *readNums(int length){
int *nums = saveMemory(length), i;
for (i = 0; i < length; i++){
scanf("%d", &nums[i]);
}
return nums;
}
int divArr (int n) {
int i=0;
int j;
int *arr = saveMemory(sizeof(arr)*4);
for (j=1; j<n; j++) {
if (n%j==0){
arr[i]=j;
i++;
}
}
return arr;
}
int sumDiv (int *arr){
int sum, i;
for (i=0; i< sizeof(arr); i++){
sum += arr[i];
}
return sum;
}
int main(int argc, char *argv[]) {
int i, j, k, length;
int *nums;
printf("Please give me the length \n");
scanf("%d", &length);
printf("Please type in the numbers to be checked \n");
nums = readNums(length);
for (k=0; k<length-1; k++) {
int a,b;
int *arr;
a=divArr(nums[i]);
b=divArr(nums[k]);
if (((sumDiv(a)) == nums[k]) && ((sumDiv(b)) == nums[i])) {
printf("%d %d \n", i, j);
} else {
i++;
}
}
}
, Что ваш вход и ожидаемые результаты? – smushi
'a = divArr (nums [i]);': 'i' не инициализируется. – BLUEPIXY
'sumDiv' is bad: он всегда суммирует первые' sizeof (int *) 'элементы переданного массива. Кроме того, в 'main' есть много неинициализированных переменных, один из которых назван BLUEPIXY. Вы скомпилировали его с включенными предупреждениями? '-Wall -Werror -pedantic'? – Deduplicator