获得分段错误:C中的11。为什么?

获得分段错误:C中的11。为什么?,c,dynamic-allocation,calloc,C,Dynamic Allocation,Calloc,下面的代码解决了在输入数字之间寻找友好对的问题。我还不知道这个算法是否是最好的,但我的问题是,下面的代码一直在返回分段错误:11。我检查,它甚至没有到达readNums函数中的for循环。有什么问题吗 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> /*saves memory for a given length */ int *saveM

下面的代码解决了在输入数字之间寻找友好对的问题。我还不知道这个算法是否是最好的,但我的问题是,下面的代码一直在返回分段错误:11。我检查,它甚至没有到达
readNums
函数中的for循环。有什么问题吗

#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++;

    }

  }


}
#包括
#包括
#包括
#包括
/*保存给定长度的内存*/
int*saveMemory(int sz){
int*ptr=calloc(sz,sizeof(int));
如果(ptr==NULL){
printf(“错误:内存分配失败(内存不足?)。\n”);
出口(-1);
}
返回ptr;
}
int*readNums(int长度){
int*nums=saveMemory(长度),i;
对于(i=0;i将int-divArr(int-n)更改为int*divArr(int-n)
  • 将main中的int a,b;更改为int*a,*b

  • 我没有检查您的逻辑

    您的输入和预期输出是什么?
    a=divArr(nums[I]);
    I
    未初始化。
    sumDiv
    不正确:它总是对第一个
    sizeof(int*)求和
    已传递数组的元素。此外,
    main
    中有许多未初始化的变量,其中一个已命名为BLUEPIXY。您编译它时是否启用了所有警告?
    -Wall-Werror-pedantic
    ?为什么要分配一个数组元素数是您显然需要的四倍?
    int*arr=saveMemory(sizeof(arr)*4);
    你忘了
    calloc
    已经知道
    int
    的大小了吗?
    int*arr=saveMemory(sizeof(arr)*4);
    应该是
    int*arr=saveMemory(sizeof(*arr)*(n-1));
    返回arr;
    :类型
    arr
    不是
    int