我正在尝试使用指针而不是数组来打印指针数组,但在运行时出现此错误 Segmentation fault
:
enter number of element:5
array[0]=1
array[1]=2
array[2]=3
array[3]=4
array[4]=5
Segmentation fault
这是代码:
#include <stdio.h>
#include <stdlib.h>
int *array;
int n;
void input(int *array,int n);
void display(int *array,int n);
int sum(int *array,int n);
int main (void) {
int result;
printf("enter number of element:");scanf("%d",&n);
input(array,n);
display(array,n);
result=sum(array,n);
printf("sum of array=%d",result);
return 0;
}
void input(int *array,int n){
int j;
array=(int *)malloc(n*sizeof(int));
for(j=0;j<n;j++){
printf("array[%d]=",j);scanf("%d",array+j);
}
}
void display(int *array,int n){
int j;
for(j=0;j<n;j++)
printf("%d\t",*(array+j));
printf("\n");
}
int sum(int *array,int n){
int sum=0,j;
for(j=0;j<n;j++)
sum+=*array+j;
return sum;
}
如何修复此代码?请有人向我解释该代码有什么问题。
最佳答案
变量 array
是函数 input
中的局部变量。
因此,用array = ...
设置它是没有意义的,因为这个赋值只在函数的内部 生效。您通常应该将其地址 (&array
) 传递给需要更改它的任何函数。
在您的特定示例中,您还有一个全局变量 array
,因此解决您的问题的一个快速方法是简单地调用函数 input
而不传递变量 数组
作为参数:
void input(int n)
{
...
array = (int*)malloc(n*sizeof(int));
...
}
int main()
{
...
input(n);
...
}
请注意,这是一个“肮脏”的解决方法,您通常应该努力避免使用全局变量。
关于c - 使用指针将数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21940673/