C 指针错误?访问违反内存读取
我必须帮助我的一个朋友,但我忘记了一点C:\那代码有什么问题?一定有指针错误。它给了我一个读取内存的权限。有什么问题吗?主要任务是:2个无限数组,并且必须计算一个数组 编辑版本:阅读正常,但可以通过文字检查。我记得我不应该返回指针,我可以返回一个计数器来计算连接到a和B数组的数字吗C 指针错误?访问违反内存读取,c,C,我必须帮助我的一个朋友,但我忘记了一点C:\那代码有什么问题?一定有指针错误。它给了我一个读取内存的权限。有什么问题吗?主要任务是:2个无限数组,并且必须计算一个数组 编辑版本:阅读正常,但可以通过文字检查。我记得我不应该返回指针,我可以返回一个计数器来计算连接到a和B数组的数字吗 #include <stdio.h> #include <stdlib.h> #include <string.h> double *bekerdezo1(double
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double *bekerdezo1(double *a){
char line[64];
double value = 0;
int n = 0;
while ((fgets(line, sizeof line, stdin) != NULL) && (line[0] != '\n')){
if (sscanf(line, "%lf", &value) == 1){
a =(double*)malloc(sizeof(*a) *(n+1));
a[n] = value;
printf("%lf",a[n]);
n = n++;
}
else {
break;
}
}
return a;
}
double *bekerdezo2(double *b){
double value = 0;
char line[64];
int n = 0;
while ((fgets(line, sizeof line, stdin) != NULL) && (line[0] != '\n')){
if (sscanf(line, "%lf", &value) == 1){
b = (double*)malloc(sizeof(*b) *(n+1));
b[n] = value;
printf("%lf",b[n]);
n = n++;
} else {
break;
}
}
return b;
}
int main(void)
{
double reszq = 0,vegosszeg=0, tarolo = 0;
int i = 0;
size_t *n = 0;
double *a=NULL, *b = NULL;
bekerdezo1(a);
bekerdezo2(b);
for(i=0;i<100; i++)
{
reszq = 0;
tarolo = (a[i])*(b[i]);
reszq = tarolo/a[i];
vegosszeg = vegosszeg + reszq;
}
printf("vegosszeg=", vegosszeg);
return 0;
}
#包括
#包括
#包括
双*bekerdezo1(双*a){
字符行[64];
双值=0;
int n=0;
而((fgets(line,sizeof line,stdin)!=NULL)和&(line[0]!='\n')){
如果(sscanf(行、%lf、&value)==1){
a=(双*)malloc(sizeof(*a)*(n+1));
a[n]=值;
printf(“%lf”,a[n]);
n=n++;
}
否则{
打破
}
}
返回a;
}
双*bekerdezo2(双*b){
双值=0;
字符行[64];
int n=0;
而((fgets(line,sizeof line,stdin)!=NULL)和&(line[0]!='\n')){
如果(sscanf(行、%lf、&value)==1){
b=(双*)malloc(sizeof(*b)*(n+1));
b[n]=值;
printf(“%lf”,b[n]);
n=n++;
}否则{
打破
}
}
返回b;
}
内部主(空)
{
双reszq=0,vegosszeg=0,tarolo=0;
int i=0;
尺寸_t*n=0;
双精度*a=NULL,*b=NULL;
bekerdezo1(a);
bekerdezo2(b);
对于main()中的(i=0;i),您可以访问全局变量a&b。这些是未正确分配的指针。
bekerdezo1()和bekerdezo2()中分配的内存分配给局部变量,而不是全局变量
然后,bekerdezo2()将局部变量返回main,但从未分配给全局变量b。
另一方面,bekerdezo1()返回全局变量b(我假设这是一个错误,它实际上应该返回局部变量a)
访问bekerdezo2()中的指针n时还存在另一个错误。该指针也未正确初始化/分配
main()中的for循环也不会检查实际输入了多少元素,而是尝试从所有100个元素中读取
您还需要验证a&b是否包含相同数量的元素,或者至少只循环,直到其中一个元素读取最小的nr
我建议删除main()的所有全局变量,并将其设置为局部变量,这将帮助您(和编译器)找到类似这样的错误。Oops!没有看到@pzaenger