gpt4 book ai didi

rust - 非法指令(核心已转储)

转载 作者:行者123 更新时间:2023-11-29 08:28:08 26 4
gpt4 key购买 nike

我如何使用 rust-0.10 进行调试?它适用于较小的数字,如 13195...我想我在使用 uint 时遇到了一些限制

use std::vec;
use std::num;
use std::iter;

fn int_sqrt(n: uint) -> uint {
num::sqrt(n as f64) as uint
}

fn simple_sieve(limit: uint) -> ~[uint] {
if limit < 2 {
return ~[];
}

let mut primes = vec::from_elem(limit + 1, true);

for prime in iter::range_inclusive(2, int_sqrt(limit) + 1) {
if primes[prime] {
for multiple in iter::range_step(prime * prime, limit + 1, prime) {
primes[multiple] = false
}
}
}
iter::range_inclusive(2, limit).filter(|&n| primes[n]).collect()
}
fn main() {
let limit: uint = 600851475143;
let limithalf: uint = limit/2 as uint;
let primes = simple_sieve(limithalf);
let sieved: ~[uint] = primes.move_iter().filter(|&n| limit % n == 0).collect();
println!("{:?}", sieved);
let mut max = 0;
let f = |x: uint| if x > max { max = x };
for x in sieved.iter() {
f(*x);
}
println!("{}", max);
}

最佳答案

问题是您尝试进行的大量分配:simple_sieve 中的 vec::from_elem 调用正在尝试分配 600851475143/2 字节,即大约 280 GB。分配失败(即 malloc 返回 NULL),ATM 只会导致 Rust 中止。

这个更简单的程序指出了问题:

extern crate libc;

fn main() {
let n = 600851475143 / 2;
let p = unsafe {libc::malloc(n as libc::size_t)};
println!("alloc {}", p)
}

为我打印alloc 0x0。尝试使用较小的数字。 :)

关于rust - 非法指令(核心已转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23338609/

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