gpt4 book ai didi

c - SIGSEGV - 运行时错误

转载 作者:行者123 更新时间:2023-11-30 20:23:14 26 4
gpt4 key购买 nike

我试图提交此代码以解决 hackerearth 上的问题,但我得到了此 SIGSEGV 运行时错误。我读到了这个错误,但我无法让我的代码工作。有人说这是由于无效的内存引用、数组的动态初始化或数组索引超出范围而发生的。

    #include <stdio.h>
long long int f(long long int);
long long int gcd(long long int,long long int);
int main(){
long long int n,q,i;
scanf("%lld",&n);
long long int a[n];
for(i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
scanf("%lld",&q);
while(q--){
char ch;
long long int x,y,sum=0;
scanf("%c%lld%lld",&ch,&x,&y);
if(ch == 'U'){
a[x] = y;
}
else if(ch == 'C'){
for(i=x;i<=y;i++){
sum = (sum + f(a[i]))%1000000007;
}
}
printf("%lld\n",sum);
}
return 0;
}
long long int f(long long int t){
long long int i;
long long int res;
for(i=1;i<=t;i++){
res = (res + gcd(i,t))%1000000007;
}
return res;
}
long long int gcd(long long int x,long long int t){
int i;
long long int divisor=1;
for(i=1;i<=x;i++){
if(x%i == 0 && t%i == 0){
divisor = i;
}
}
return divisor;
}

最佳答案

一个明显的错误:

  long long int a[n];
for(i=1;i<=n;i++){ // <-- will cause buffer overrun on last iteration
scanf("%lld", a[i]); // <-- need address of argument

在循环的最后一次迭代中,您正在访问a[i],当i == n时,这是缓冲区溢出。此外,您的 scanf 需要传递地址。

循环应该是:

 long long int a[n];
for(i=1;i<n;i++){
scanf("%lld", &a[i]);
或者,如果您确实想使用基于 1 的假数组(我真的不建议这样做,因为我已经看到太多次代码中某处存在差一错误),您会这样做这个:

 long long int a[n+1];
for(i=1;i<=n;i++){
scanf("%lld", &a[i]);

关于c - SIGSEGV - 运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36673478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com