我收到了分段错误错误。 谁能告诉我为什么?
#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编写程序并使其正常工作。 任何帮助表示赞赏!
三江源!
编辑: 分段错误是固定的,但现在它不打印总和的实际字符....
答案 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)