【发布时间】:2021-03-26 19:13:31
【问题描述】:
我正在尝试添加两个数组的元素并将它们存储在第三个数组中。我正在试验指针,所以我想将它们用作用户定义函数的参数。 当我运行代码时,只要输入数组的前两个值,就会得到错误:exited,segmentation fault。 我痛苦地不知道自己做错了什么。
#include<iostream>
using namespace std;
float addarrays(float ptra1[5], float ptra2[5], float ptra3[5])
{
for(int i=0; i<5; i++)
{
ptra3[i] = ptra1[i] + ptra2[i];
}
return *ptra3;
}
int main()
{
float A[5], B[5], C[5];
float *ptA[5], *ptB[5], *ptC[5];
cout<<"Enter Array A: \n";
for(int i=0; i<5; i++)
{
cout<<"Element A["<< i <<"] = ";
cin>>*ptA[i];
}
cout<<"\nEnter Array B: \n";
for(int i=0; i<5; i++)
{
cout<<"Element B["<< i <<"] = ";
cin>>*ptB[i];
}
addarrays(*ptA, *ptB, *ptC);
cout<<"Displaying result for C[i] = A[i] + B[i]: \n";
for(int i=0; i<5; i++)
{
cout<<"\nElement C["<< i <<"] = "<<*ptC[i];
}
return 0;
}
【问题讨论】:
-
不要使用数组。请改用
std::vector。 -
您正在尝试存储值而不为其分配内存。就在您的
cin>>*ptX[i];之前写ptX[i]=&X[i];exptA[i]=&A[i];。还可以使用另一个循环来设置ptC[i]=&C[i]。但这一切都是多余的,你可以直接使用指向数组的指针。 -
“只要我输入数组的前两个值”——这为您提供了一种减少 minimal reproducible example 的方法。由于您永远不会到达
cout<<"\nEnter Array B: \n"行,因此请删除它以及直到main函数末尾的所有后续行。然后删除现在未使用的声明和定义。您将有一个更集中的问题,更少的红鲱鱼。