簡體   English   中英

算法導致分段錯誤

[英]Algorithm causes segmentation fault

我已經建立了一個遵循以下的算法:

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 之前打印的數字的數量,包括打印 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;
}

但是,這會產生一個分段錯誤,導致我的指針不足,但是,我找不到它。

更新:根據評論,我相信該程序現在按預期運行

“產生分段錯誤”是因為(*z)是 UB。
z是一個未初始化的指針數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM