算法导致分割错误

  • 本文关键字:错误 分割 算法 c
  • 更新时间 :
  • 英文 :


我构建了一个算法,如下所示:

input n
print n
if n = 1 then STOP
if n is odd then n ←− 3n + 1
else n ←− n/2 GOTO 2

如果n = 22,则应打印出来:

22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

给定输入n,可以确定在打印1之前打印的数字的数量。对于给定的n,这被称为n的循环长度。在上面的例子中,22的循环长度是16。

因此,我必须分别确定两个整数i,j之间和包含两个整数的循环长度。

#include <stdlib.h>
#include <stdio.h>
#define MAXSIZE 100
int test(int i, int j){
int* z[MAXSIZE];
int n = j-i;
int *p;
p = &j;
int o = 0;
while(&free){
int k = 0;
printf("n%d -> %d ->> %d & %d", i, j, n, *p);
while(&free){
if (i == 1){
break;
} else if ((i % 2) != 0)
{
i = 3*i+1;
} else{
i = i/2;
}
k++;
}
(*z)[o] = k;
o++;

if (n == 1){
break;
}
n--;
i = *p-n;
}
size_t size = sizeof(z)/sizeof(z[0]);
int m = 0;
for (int i = 0; i < size; i++){
//printf("n RESULTS: -- %d", (*z)[i]);
if (m < (*z)[i]){
m = (*z)[i];
} else {
continue;
}
}
return m;
}
int main(){
int i=900;
int j=1000;
int result;
result = test(i,j);
printf("n RESULT: %d", result);
return 0;
}

然而,这产生了一个分段错误,它导致了我的指针不足,然而,我找不到它

更新:根据评论,我相信该计划现在按预期运行

"产生分段故障";这是因为CCD_ 3是UB
z是一个未初始化的指针数组。

最新更新