unsafe_rust
This commit is contained in:
parent
191e5af4c7
commit
fb508b86fd
|
@ -0,0 +1,9 @@
|
||||||
|
[package]
|
||||||
|
name = "unsafe_rust"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["gbrochar <gaetanbrochard@protonmail.com>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
|
@ -0,0 +1,65 @@
|
||||||
|
use std::slice;
|
||||||
|
|
||||||
|
unsafe fn dangerous() {
|
||||||
|
}
|
||||||
|
|
||||||
|
fn split_at_mut(slice: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) {
|
||||||
|
let len = slice.len();
|
||||||
|
let ptr = slice.as_mut_ptr();
|
||||||
|
|
||||||
|
assert!(mid <= len);
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
(
|
||||||
|
slice::from_raw_parts_mut(ptr, mid),
|
||||||
|
slice::from_raw_parts_mut(ptr.add(mid), len - mid),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
fn abs(input: i32) -> i32;
|
||||||
|
}
|
||||||
|
|
||||||
|
static mut COUNTER: u32 = 0;
|
||||||
|
|
||||||
|
fn add_to_count(inc: u32) {
|
||||||
|
unsafe {
|
||||||
|
COUNTER += inc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut num = 5;
|
||||||
|
|
||||||
|
let r1 = &num as *const i32;
|
||||||
|
let r2 = &mut num as *mut i32;
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
println!("r1 is: {}", *r1);
|
||||||
|
println!("r2 is: {}", *r2);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
dangerous();
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut v = vec![1, 2, 3, 4, 5, 6];
|
||||||
|
|
||||||
|
let r = &mut v[..];
|
||||||
|
|
||||||
|
let (a, b) = split_at_mut(r, 3);
|
||||||
|
|
||||||
|
assert_eq!(a, &mut [1, 2, 3]);
|
||||||
|
assert_eq!(b, &mut [4, 5, 6]);
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
println!("Absolute value of -3 according to C: {}", abs(-3));
|
||||||
|
}
|
||||||
|
|
||||||
|
add_to_count(3);
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
println!("COUNTER: {}", COUNTER);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue