C BogoSort 中的分段错误

问题描述 投票:0回答:1

我已经开始学习 c 并想用它来编写 bogosort 程序。我编码了大部分部分,但当我开始时,我遇到了分段错误错误,但不知道为什么。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>

int tries = 0;

int bogo[7];
int length = sizeof(bogo) / sizeof(bogo[0]);

void setBogo();
void printBogo();
bool bogoFinished();
void sortNew();

int main() {
    setBogo();
    
    while (!bogoFinished()) 
        sortNew();
        
    printBogo();
    printf("Versuche benötigt: %d", tries);

    return 0;
}

void setBogo() {
    srand(time(NULL));
    
    for (int i = 0; i < length; i++)
        bogo[i] = rand() % 100;
}

void printBogo() {
    for (int i = 0; i < length; i++)
        printf("Pos.: %d, Value: %d\n", i, bogo[i]);
}

bool bogoFinished() {
    int letzte = 0;
    
    for (int i = 1; i < length; i++)
        if (bogo[i] < bogo[letzte])
            return false;
        else letzte = i;
        
    return true;
}

void sortNew() {
    srand(time(NULL));
    tries++;
    
    for (int i = 0; i < length; i++) {
        int value = bogo[i];
        int ran = rand();
        
        bogo[i] = bogo[ran];
        bogo[ran] = value;
    }
}

代码如何工作: 首先,我用随机整数设置数组中的所有位置。然后,在 while 循环中检查数组是否已排序。如果是,则数组将再次随机排序。初始化数组的算法之前有效,所以我认为这是在度假部分的某个地方引起的。

c segmentation-fault
1个回答
0
投票

罪魁祸首是

bogo[i] = bogo[ran];
(以及下面一行),因为
rand()
返回0到
RAND_MAX
范围内的值,这是一个未指定的,但通常相当大的整数;肯定比你的长度为 7 的数组大。
要保持在范围内,请改用
rand() % length

© www.soinside.com 2019 - 2024. All rights reserved.