标签: unsafe-pointers

了解C#中的GCHandle.Alloc固定

我无意间发现了一些对我来说毫无意义的东西。我的问题在代码注释中和下面:

[SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]
[StructLayout(LayoutKind.Sequential, Size = 4096)]
public unsafe struct BufItems
{
    public fixed byte Buffer[4096];
}

public class Wrapper
{
    public BufItems Items;
    public int Id;
}

private unsafe void button10_Click(object sender, EventArgs e)
{
    Wrapper wrap = new Wrapper();
    wrap.Id = 123;

    fixed(BufItems* ptr = &wrap.Items)
    {
        ptr->Buffer[0] = 99;      // works fine
    }

    // fixed (Wrapper w = wrap)   { /* not possible */ };
    // fixed (Wrapper* w = &wrap) { /* not possible …
Run Code Online (Sandbox Code Playgroud)

.net c# prototyping pointers unsafe-pointers

2
推荐指数
1
解决办法
3479
查看次数

Do classes with uninitialized pointers have undefined behavior?

class someClass
{
public:
    int* ptr2Int;
};
Run Code Online (Sandbox Code Playgroud)

Is this a valid class (yes it compiles)? Provided one assigns a value to ptr2Int before dereferencing it, is the class guaranteed to work as one would expect?

c++ standards pointers initialization unsafe-pointers

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

UnsafeMutablePointer <UInt8>:风险是什么?

我在Objective-C库的回调中收到了其中一个: UnsafeMutablePointer<UInt8>

我能够解析它.我也可以创建一个将它发送回图书馆,但是:使用"不安全"类型有什么风险?我该如何避免这些风险?

另外,Objective-C库正在使用uint8_t *与Swift的桥接器UnsafeMutablePointer<UInt8>......这对于Swift互操作来说是最好的吗?

unsafe-pointers swift

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

通用类型“UnsafeMutablePointer&lt;UInt8&gt;”的扩展

我想创建一个UnsafeMutablePointer仅影响的扩展UnsafeMutablePointer<UInt8>......

\n\n

我知道这些说明是相关的,但我不确定如何:

\n\n
\n

扩展泛型类型时,不提供类型参数列表作为扩展\xe2\x80\x99s 定义的一部分。相反,原始类型定义中的类型参数列表在扩展主体中可用,并且原始类型参数名称用于引用原始定义中的类型参数。

\n
\n\n

基本上,我正在尝试使用这种方法:

\n\n
func toSwift(length: Int) -> [Int] {\n    var retVal : [Int] = []\n    for i in 0..<length {\n        retVal.append(Int(self[i]))\n    }\n    return retVal\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

采取行动,self无需UnsafeMutablePointer<UInt8>...这可能吗?

\n

generics unsafe-pointers swift

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

如何从现有的 CGRect 创建 UnsafePointer&lt;CGRect&gt;

如何创建 UnsafePointer?尝试让 mediaBoxPtr = UnsafePointer(mediaBox) 但失败

func PDFImageData(filter: QuartzFilter?) -> NSData? {
    let pdfData = NSMutableData()
    let consumer = CGDataConsumerCreateWithCFData(pdfData);
    var mediaBox =  CGRect(x: 0, y: 0, width: bounds.size.width, height: bounds.size.height)
    let mediaBoxPtr : UnsafePointer<CGRect> = nil //???? I need CGRect(x:0, y:0, bounds.size.width, bounds.size.height)
    if let pdfContext = CGPDFContextCreate(consumer, mediaBoxPtr, nil) {
      filter?.applyToContext(pdfContext)}
Run Code Online (Sandbox Code Playgroud)

cocoa unsafe-pointers cgrect swift

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

快速将数据转换为UnsafeMutablePointer &lt;Int8&gt;

我正在从Swift的目标C类中调用函数。

-(char *)decrypt:(char *)crypt el:(int)el{}
Run Code Online (Sandbox Code Playgroud)

从swift调用此函数时,它要求提供一个UnsafeMutablePointer<Int8>作为参数“ crypt”的值

“ crypt”的值来自服务器,它是base64编码的字符串。因此,我对该字符串进行了解码,并得到了一个Data对象。

let resultData = Data(base64Encoded: base64String)
Run Code Online (Sandbox Code Playgroud)

现在,我需要将此数据传递给上述函数。我试图将此Data对象转换为UnsafeMutablePointer<Int8>

resultData?.withUnsafeBytes { (u8Ptr: UnsafeMutablePointer<Int8>) in
                    let decBytes = tea?.decrypt(u8Ptr , el: el)}
Run Code Online (Sandbox Code Playgroud)

但是它没有编译。给出以下错误

“ UnsafeMutablePointer”不能转换为“ UnsafePointer <_>”

我对目标c不太了解。因此,谁能帮助我将此参数传递给目标c函数。

objective-c unsafe-pointers ios swift

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

如何安全地获取两个指向同一个 int 的可变指针?

我想创建一个包装 libcsem_postsem_wait函数的 Rust 信号量,它们都采用可变int *参数。这要求服务员和海报同时拥有一个指向同一个 int 的可变指针。我该如何安排而不冒 UB 的风险?

我的一个想法是使用UnsafeCell

use libc;
use std::cell::UnsafeCell;

pub struct Sema {
    sema: UnsafeCell<i32>,
}

impl Sema {
    pub fn post(&self) {
        unsafe { libc::sem_post(self.sema.get()) };
    }

    pub fn wait(&self) {
        unsafe { libc::sem_wait(self.sema.get()) };
    }
}
Run Code Online (Sandbox Code Playgroud)

这安全吗?有更好的方法吗?谢谢你的帮助!

unsafe-pointers rust

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