分段故障错误

时间:2013-01-24 00:11:53

标签: c

我收到了分段错误错误。 谁能告诉我为什么?

        #include <stdio.h>
        #include <stdlib.h>

       char sumArrays(int * arr1[], int * arr2[], int length, int count){
       if(count == length){
           return ' ';
       }
       else{
          int sum = 0;
       sum =  *arr1[count] + *arr2[count];
       char ch = '            
       ch = ch + (char)sum;
       return ch + sumArrays(arr1, arr2, length, count+1);
    }
  }

int main(int argc, char * arr[]){
    int length = 6;
    printf("Enter the first row of 6 integers:");
    int * arr1 = malloc(length * sizeof(int));
    int * arr2 = malloc(length * sizeof(int));
    int counter = 0;
    int number = 0;
    while(counter < length){
       scanf("%d", &number);
       arr1[counter]=number;
       counter++;
    }
    counter = 0;
    printf("Enter the second row of 6 integers:");
    while(counter < length){
      scanf("%d", &number);
      arr2[counter] = number;
      counter++;
    }
    char sum = sumArrays(&arr1, &arr2, length, 1);
    free(arr1);
    free(arr2);
    printf("Their sums are : %c ", sum);
    return 0;
  }      

我是C的新手,对语言知之甚少。我曾是 能够用Java编写程序并使其正常工作。 任何帮助表示赞赏!

三江源!

编辑: 分段错误是固定的,但现在它不打印总和的实际字符....

2 个答案:

答案 0 :(得分:1)

这是“&amp;数组不生成指针数组”的另一种情况。

这是一个指针数组:

 int * arr1[]

这是一个指向整数数组的指针;

&arr1     // That is, one pointer to your array of integers. 

因此,当您为计数&gt;访问此内容时0,编译器尝试读取您没有给出的指针值。

*arr1[count]

解决方法是在这里和那里移除一颗星和&amp;在其他地方:

删除*

   char sumArrays(int * arr1[], int * arr2[], int length, int count){
   sum =  *arr1[count] + *arr2[count];

删除&amp;:

char sum = sumArrays(&amp; arr1,&amp; arr2,length,1);

我个人也会改变这个:

int length = 6;
int * arr1 = malloc(length * sizeof(int));
int * arr2 = malloc(length * sizeof(int));

为:

const int length = 6;
int arr1[length];
int arr2[length];

并摆脱底部的free(arr1); free(arr2)。没有必要分配数组,直到它们变得非常大,几百个整数完全没问题。

答案 1 :(得分:0)

在这一行:

sum =  *arr1[count] + *arr2[count];

您正在以错误的顺序取消引用第二级指针。正确的是:

sum =  (*arr1)[count] + (*arr2)[count];

但真正的答案是:您不需要使用arr1的地址。将sumArrays声明更改为:

char sumArrays(int arr1[], int arr2[], int length, int count)