gpt4 book ai didi

c - C 语言 Collat​​z 猜想程序中的段错误

转载 作者:行者123 更新时间:2023-11-30 21:21:39 24 4
gpt4 key购买 nike

我正在运行这个程序(对于 Collatz Conjecture ),并且在第 33 行出现段错误,但第 33 行只是一个 } 。在一个 block 的末尾。不知道是不是栈的问题。你能帮忙吗?

int main(int argc, char** argv) {
int x,y,temp;
int maximum_cycle[MAX_NUMERO];
scanf("%d",&x);
scanf("\n%d",&y);
if (x>y){
temp=x;
x=y;
y=temp;
}
hallarNumeroCiclo(x,y,&maximum_cycle[MAX_NUMERO]);
printf("\n%d %d %d\n",x,y,Maximo(x,y,&maximum_cycle[MAX_NUMERO]));
return (EXIT_SUCCESS);
}

hallarNumeroCiclo(int x,int y,int *maximum_cycle[MAX_NUMERO]){
int k,n;
for (n=0;(x < y) ;--y){
for(k=y;k!=1;){
if ((k % 2) ==0)
{
k/=2;
n+=1;
}
else if ((k%2)==1)
{
k = 3*k+1;
n+=1;
}
if (k==1) {
n+=1;
/*this is the line where the error occurs, the next bracket */
}
}
*maximum_cycle[y-x]=n;
}
}

int Maximo(int x, int y,int *maximum_cycle[MAX_NUMERO]){
int i;
int maximo =0;
for(i=0;(i>(y-x));i++){
if (*maximum_cycle[i]>maximo){
maximo=*maximum_cycle[i];
}
}
return maximo;
}

最佳答案

您正在将 &maximum_cycle[MAX_NUMERO] 传递给 hallarNumeroCircloMaximo,这是一个单个整数指针!这是由于数组索引选择了一个,然后您获取了该地址。

但是,函数所需的类型是数组,当你尝试写入时,它会写入到未知/未映射的区域,因此对您的程序进行 SIGSEGV。

你的问题实际上是,当你向它传递一个指针时,除了指向指针的指针之外的函数。请注意,为指针数组分配的空间可能小于实际的整数数组。在 x86 上它们是相同的,但在这里你的问题是你的代码向你的指针写入了虚假的东西,并且取消引用下一个指针会让你崩溃。

尝试在源中使用 &maximum_cycle 而不是 &maximum_cycle[MAX_NUMERO]

关于c - C 语言 Collat​​z 猜想程序中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22692225/

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