标签: unsafe

int*如何在C#中bool?

我试图在C#中使用像C中的指针.

public static void Main(string[] args)
    {
        unsafe
        {
            int i = 5;
            int* j = &i;
            Console.WriteLine(j);  //cannot convert from 'int*' to 'bool'
        } 

    }
Run Code Online (Sandbox Code Playgroud)

我对此代码有两个疑问:

  1. 如何用/ unsafe编译?
  2. 为什么Console.Writeline(j)要尝试转换j to bool

c# pointers unsafe

3
推荐指数
1
解决办法
462
查看次数

在C#中返回一个固定的指针

我想知道将固定指针从一个方法返回到另一个方法是否安全 - 固定对象是否仍然保持固定?例如

struct TestData
{
    public int value;
}

public class Class1
{
    private TestData data; 

    public unsafe TestData* GetDataPtr()
    {
        fixed (TestData* ptr = &data)
        {
            // IS THIS SAFE?
            return ptr; 
        }
    }
}

public class Class2
{
    public unsafe void Test()
    {
        Class1 x = new Class1();

        TestData* ptr = x.GetDataPtr(); // is this still fixed?
        ptr->value = 2; 
    }
}
Run Code Online (Sandbox Code Playgroud)

我问的原因是使用这种风格的东西我一直在获得AccessViolation异常.但是因为我将它改为例如直接从Class1设定值我没有看到问题发生.

编辑:我认为可能修复的原因是,如果从"TestData*ptr = x.GetDataPtr()"之外你试图将fixed()置于"你不能获取已经修复的表达式的地址"...我现在得到它虽然它正在谈论我在"Test()"中的var"ptr"已经被修复了..

c# unsafe fixed

3
推荐指数
1
解决办法
2004
查看次数

int来浮点指针

在C++中,有一个浮点值被放入int:

int value = *(int *)(&myFloatValue);
Run Code Online (Sandbox Code Playgroud)

该值将传递给我在C#中编写的程序.在运行时不知道该值是int类型还是float类型.我必须考虑这两个选项.显然,如果它是一个int,我已经拥有它.但是如果它是一个浮点数我需要更改它(不是强制转换)它的浮点值.我该怎么做呢?我尝试在C#中使用指针但是没有成功.

.net c# pointers unsafe

3
推荐指数
1
解决办法
1142
查看次数

Rust如何从数组转换为std :: raw ::: Slice

std::raw::Slice 定义为:

pub struct Slice<T> {
    pub data: *const T,
    pub len: uint,
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试这样的事情:

use std::raw::Slice as RawSlice;
let a = [1i,2,3,4];
let s : RawSlice<int>= RawSlice{data: a as *const int, 
        len : a.len()};
Run Code Online (Sandbox Code Playgroud)

这不编译.error: non-scalar cast: [int, ..4] as *const int.我基本上无法弄清楚如何获得指向数组开头的指针.

类似的问题是:如何从[int]转换为*const int?

unsafe rust

3
推荐指数
1
解决办法
2796
查看次数

在Safari 10中设置不安全模式的位置使java插件访问本地文件

我刚刚将我的Safari从Safari 9更新为safari 10 beta版.我的客户端是从页面运行的java applet.在Safari 9和版本之前,它运行正常.但在Safari 10测试版中,它失败了.我发现safari 10阻止从Java applet访问本地文件.所以我认为这是因为java插件在安全模式下运行.但在Safari - > preferences-> security-> Plug-in Settings中.没有不安全的模式选项来检查.只有三个选项:Ask,Off,On.所以我的客户端现在无法以安全模式访问本地文件.

我的mac系统是OS X El Capitan版本10.11.6,Safari版本是10.0版本

可以在Safari 10测试版中设置不安全模式吗?

beta safari applet unsafe mode

3
推荐指数
1
解决办法
6435
查看次数

将Rust中的Vec <String>传递给C中的char**

我一直在尝试在Rust中编写一个直接链接到libc库的shell .我用a Vec<String>来保存要传递的参数execvp(),但似乎我的转换char **没有成功.执行时,所有参数都变为空字符串.

这是涉及的代码片段.

fn safe_execvp(path: String, argv: Vec<String>) -> Result<(), i32> {
    unsafe {
        let c_path = CString::new(path.as_str()).unwrap();
        let mut c_argv_vec = Vec::new();
        for arg in &argv {
            let c_arg = CString::new(arg.as_str()).unwrap().as_ptr();
            c_argv_vec.push(c_arg);
        }
        c_argv_vec.push(std::ptr::null());
        match execvp(c_file.as_ptr(), c_argv_vec.as_ptr()) {
            num => Err(num),
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

execvp是C库函数定义为fn execvp(file: *const i8, argv: *const*const i8) -> i32;.

我不确定我做错了什么.是因为参数的内存在调用之前被释放了execvp()吗?

unsafe libc execvp rust

3
推荐指数
2
解决办法
935
查看次数

获取标准库函数地址的替代方法/可能是格式错误的行为

问题:通过获取标准库函数的地址可能会出现格式错误的行为……请参见下面的示例。因此,我正在寻找一种替代标准库函数地址的方法。

根据http://eel.is/c++draft/namespace.std#6和@Caleth 在Why function-pointer assignment work in direct assignment 但不在条件运算符中指出

“请注意,您通过获取标准库函数的地址(未指定可寻址)来依赖未指定(可能格式错误)的行为”

如本例所示:

int (*fun)(int) = std::toupper;
int t = fun('x');
Run Code Online (Sandbox Code Playgroud)

我的问题:

1) 有没有安全的方法通过指针调用(在本例中)toupper?

2) static_cast 是否使指向 std lib 函数的函数指针安全?喜欢:

int (*fun)(int) = static_cast<int(*)(int)>(std::toupper);
int t = fun('x');
Run Code Online (Sandbox Code Playgroud)

2)是否有另一种方法可以通过带有签名“int fun(int)”的单个函数来实现以下功能

bool choice = true;
int (*fun)(int);

if (choice) {
    fun = std::toupper;
}
else {
    fun = std::tolower;
}

int t = fun('x');
Run Code Online (Sandbox Code Playgroud)

c++ unsafe function-pointers std

3
推荐指数
1
解决办法
95
查看次数

“不安全”范围的嵌套会影响性能吗?

我想问一下第一个例子是否比第二个例子慢。

示例 1:for、unsafe、unsafe、unsafe 等

for (var i = 0; i < ...; i++)
{
    unsafe
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

示例 2:不安全,因为

unsafe
{
    for (var i = 0; i < ...; i++)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

文档中没有任何地方涉及这方面。

题:

有人可以假设unsafe代码块的位置不会影响性能吗?

c# unsafe

3
推荐指数
1
解决办法
56
查看次数

Swift 中 MemoryLayout.size 中数组的大小

抱歉,如果问题可能重复,我既无法在此处找到,也无法使用 Google。

我是不安全 Swift 的新手,我想知道为什么 Bools 数组的大小(例如 10 个字节)仍然是 8 个字节?

如果我不能说出我的意思,我会想知道你是否可以看看这段代码:

var boolArray = [Bool]()
for _ in 1...10{
    boolArray.append(true)
}
print(MemoryLayout.size(ofValue: boolArray))
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它打印 8 而数组有 10 个至少包含 10 个字节的 bool。

arrays unsafe memory-layout swift

3
推荐指数
1
解决办法
354
查看次数

在安全的 Rust 中是否可能出现未定义的行为?

有没有办法在不使用 Rust 的情况下实现未定义的行为unsafe

当然,这种行为可以由第三方库封装在“安全”函数中,所以假设我们只使用标准函数。

unsafe standard-library undefined-behavior rust

3
推荐指数
1
解决办法
836
查看次数